我之前问了一个问题,有人给我一个指南,我看了它,我看到了这个
var temp = setTimeout,
setTimeout = function() {};
他说由于JavaScript提升,temp将不确定,我不明白为什么 它不应该是那样的吗?
var temp;
temp = setTimeout;
setTimeout = function() {};
为什么它未定义?
答案 0 :(得分:5)
这不一样。您的multiple var
declaration也声明setTimeout
:
var temp = setTimeout,
setTimeout = function() {};
被提升到
var temp; // = undefined
var setTimeout; // = undefined
temp = setTimeout;
setTimeout = function() {};
答案 1 :(得分:0)
使用关键字 var 声明的变量的范围是其当前的执行上下文。初始化变量后,JavaScript引擎默认会将变量初始化为 undefined 。 喜欢,
var a; //it initializes to undefined
再次在声明变量之前使用变量时,该变量现在处于运行上下文中。 例如:
console.log(a);
var a=10;
在这种情况下,javascript引擎通过以下方式运行代码,
var a; // a = undefined
console.log(a); //
a =10;
它将变量声明置于执行上下文的顶部,但不包含其值。您可能已经知道这称为提升。
您的情况:
var temp = setTimeout,
setTimeout = function() {};
来自function(){},假设我们得到的值= 10;
现在您的代码如下:
var temp = setTimeout,
setTimeout = 10;
但是javascript通过以下方式进行操作
var temp; // temp = undefined
var setTimeout; // setTimeout = undefined
temp = setTimeout; // here temp is undefined as setTimeout is undefined
setTimeout =10;
它将所有声明的变量保持在堆栈的顶部(不是其值,但初始化为未定义)。
如果您想了解更多信息,请访问以下链接: