首先给出结论,然后再举例
结论
提升:函数声明和变量声明提升;函数赋值和变量赋值不提升
优先级: 函数>变量
特殊情况:if 语句中,函数声明提升时,会将前面的变量赋值一起提升出去
声明提升,赋值不提升
举例1:函数
console.log(foo);
function foo(){
console.log("函数声明1");
}
var foo = function(){
console.log("函数声明2");
}
输出为:
function foo(){
console.log("函数声明");
}
举例2:变量
console.log(foo);
var foo;
foo = "变量";
输出为:
undefined
优先级
举例1
console.log(foo);
function foo(){
console.log("函数声明");
}
var foo = "变量";
输出为:
function foo(){
console.log("函数声明");
}
代码实际是:
function foo(){
console.log("函数声明");
}
var foo;
console.log(foo);
foo = "变量";
特殊情况:if 语句中,函数声明提升时,会将前面的变量赋值一起提升出去
console.log(a); // undefined
if (true) {
a = 1;
function a() {} // 把1提升出去了
a = 2;
}
console.log(a); // 1
看个例子
console.log("1、value: " + a, " type: " + typeof a);
var a = 0;
if (true) {
console.log("2、value: " + a, " type: " + typeof a);
a = 1;
console.log("3、value: " + a, " type: " + typeof a);
a = 2;
console.log("4、value: " + a, " type: " + typeof a);
function a() {}
a = 3;
console.log("5、value: " + a, " type: " + typeof a);
a = 4;
console.log("6、value: " + a, " type: " + typeof a);
}
console.log("7、value: " + a, " type: " + typeof a);
输出结果如下:
/***
* 1、value: undefined type: undefined
* 2、value: function a() {} type: function
* 3、value: 1 type: number
* 4、value: 2 type: number
* 5、value: 3 type: number
* 6、value: 4 type: number
* 7、value: 2 type: number
*
* ***/
网友评论