var text = 'outside';
function logIt(){
console.log(text);
text ='inside';
}
logIt(); //prints outside. why?
我认为函数text
中的logIt()
将被提升到函数的顶部并打印undefined
?
var text = 'outside';
function logIt(){
console.log(text);
var text ='inside';
}
logIt(); //prints undefined
此按预期打印undefined
。有人可以在case1
中解释为什么我们得到的值outside
?
答案 0 :(得分:2)
由于提升内部变量text
被移动到函数的开头。但只有它的名字部分:
var text = 'outside';
function logIt(){
var text;
console.log(text);
text ='inside';
}
logIt(); //prints undefined
案例1记录"在"之外,因为text
是logIt
周围范围内的变量,因此可以在logIt
内访问。您在text
电话后以词汇方式重新分配console.log
。所以这个重新考虑是不会被考虑的。
答案 1 :(得分:2)
变量声明被提升,而不是作业。
在第一个功能中,您只需在调用text
后覆盖console.log
的值,但不会引入其他text
到功能的本地范围。
在第二种情况下, 引入了一个新的text
变量,该变量是本地的(并按预期初始化为undefined
),并且由于变量提升,实际var text
行在调用console.log
之前解释,因此undefined
。
请参阅MDN
答案 2 :(得分:1)
吊装:你可以理解它,因为整个函数体是在脚本的顶部和变量一起获取的 具有未定义的值(如果在完成赋值之前使用它们)
现在案例1:
当您调用该函数并且console.log执行时,文本的值仍然是"在"
之外在控制台记录之后,它将值更改为"在"
内如果在调用logIt()后立即编写console.log,它将显示" inside"然后
var text = 'outside';
function logIt(){
console.log(text);
text ='inside';
}
logIt(); //prints outside. why?
案例2:在这种情况下,您在函数logIt中创建一个新的var,然后将其作为提升 var text = undefined(在分配之前使用它)
var text = 'outside';
function logIt(){
console.log(text);
var text ='inside';
}
logIt(); //prints undefined
这次调用函数后尝试打印console.log(text)。在这种情况下,它会在外面打印,因为全局范围没有效果,因为在这种情况下logIt函数"