var a=100;
function a(){
console.log(a);
}
a();
//a is not a function问题来了,为什么会报这个错误呢? 这里涉及到函数和变量的预解析:- 函数声明会置顶
- 变量声明也会置顶
- 函数声明比变量声明更置顶:(函数在变量上面)
- 变量和赋值语句一起书写,在js引擎解析时,会将其拆成声明和赋值2部分,声明置顶,赋值保留在原来位置
- 声明过的变量不会重复声明
知道以上的规则,上面的代码等同于 :
var a=function (){
console.log(a);
}
var a=100;
a();
相当于给a重新赋值了,所以会报错。
console.log(b());
var b = 1;
function b(){
console.log('a');
}
// a
// undefined 方法没有返回值