Javascript 你能澄清一下这种行为吗? 案例1:
我以为函数Javascript 你能澄清一下这种行为吗? 案例1:,javascript,hoisting,Javascript,Hoisting,我以为函数logIt()中的文本将被提升到函数顶部,并将打印未定义的 案例2: 这一个按预期打印未定义的。有人能解释一下为什么在case1中,我们得到了外部的值吗?因为内部变量text被移动到函数的开头。但只有它的名称部分: var text = 'outside'; function logIt(){ var text; console.log(text); text ='inside'; } logIt(); //prints undefined 案例1记录为“外部
logIt()
中的文本将被提升到函数顶部,并将打印未定义的
案例2:
这一个按预期打印未定义的
。有人能解释一下为什么在case1
中,我们得到了外部的值吗?因为内部变量text
被移动到函数的开头。但只有它的名称部分:
var text = 'outside';
function logIt(){
var text;
console.log(text);
text ='inside';
}
logIt(); //prints undefined
案例1记录为“外部”,因为text
是logIt
周围范围内的一个变量,因此可在logIt
中访问。您可以在console.log
调用之后按词汇重新分配text
。因此,不考虑这种重新赋值。由于提升,内部变量text
被移动到函数的开头。但只有它的名称部分:
var text = 'outside';
function logIt(){
var text;
console.log(text);
text ='inside';
}
logIt(); //prints undefined
案例1记录为“外部”,因为text
是logIt
周围范围内的一个变量,因此可在logIt
中访问。您可以在console.log
调用之后按词汇重新分配text
。因此,这种重新分配没有被考虑。被提升的是变量声明,而不是分配
在第一个函数中,您仅在调用console.log
后覆盖text
的值,但没有将其他text
引入函数的本地范围
在第二种情况下,您将引入一个新的文本
变量,该变量是本地变量(并按预期初始化为未定义
),由于变量提升,实际的变量文本
行在调用控制台.log
之前被解释,因此未定义
参见提升的是变量声明,而不是赋值
在第一个函数中,您仅在调用console.log
后覆盖text
的值,但没有将其他text
引入函数的本地范围
在第二种情况下,您将引入一个新的文本
变量,该变量是本地变量(并按预期初始化为未定义
),由于变量提升,实际的变量文本
行在调用控制台.log
之前被解释,因此未定义
请参见提升:您可以理解它,因为整个函数体都位于脚本的顶部,并且包含
具有未定义的值(如果在赋值之前使用)
现在案例1:
在调用函数并执行console.log时,text的值仍为“外部”
在控制台日志之后,它将值更改为“内部”
如果在调用logIt()后立即编写console.log,那么它将显示“inside”
案例2:在这种情况下,您在函数logIt中创建了一个新的var,然后它将作为
var text=未定义(在赋值之前使用)
这次调用函数后,请尝试打印console.log(文本)。它将打印“在本例中为外部,因为全局范围在本例中由于logIt函数而无效”提升:您可以理解它,因为整个函数体与变量一起位于脚本顶部
具有未定义的值(如果在赋值之前使用)
现在案例1:
在调用函数并执行console.log时,text的值仍为“外部”
在控制台日志之后,它将值更改为“内部”
如果在调用logIt()后立即编写console.log,那么它将显示“inside”
案例2:在这种情况下,您在函数logIt中创建了一个新的var,然后它将作为
var text=未定义(在赋值之前使用)
这次调用函数后,请尝试打印console.log(文本)。它将打印“在这种情况下是外部的,因为全局作用域在这种情况下没有效果,因为logIt函数”在函数外部声明的变量是全局的,可以在函数内部使用。在函数外部声明的变量是全局的,可以在函数内部使用。@Wild-hm,可能您假设text='inside'代码>也被提升。请注意,只有变量var x=“inside”代码>和函数声明function f(){}
被挂起。@Wild-hm,也许您假设text='inside'代码>也被提升。请注意,只有变量var x=“inside”代码>和函数声明函数f(){}
被挂起。
var text = 'outside';
function logIt(){
var text;
console.log(text);
text ='inside';
}
logIt(); //prints undefined
var text = 'outside';
function logIt(){
console.log(text);
text ='inside';
}
logIt(); //prints outside. why?
var text = 'outside';
function logIt(){
console.log(text);
var text ='inside';
}
logIt(); //prints undefined