javascript中的提升
我以前问过一个问题,有人给了我一个指南,我读了,我看到了这个javascript中的提升,javascript,hoisting,Javascript,Hoisting,我以前问过一个问题,有人给了我一个指南,我读了,我看到了这个 var temp = setTimeout, setTimeout = function() {}; 他说由于JavaScript的提升,temp将是未定义的,我不明白为什么 它不应该是这样吗 var temp; temp = setTimeout; setTimeout = function() {}; 那么为什么它没有定义呢?这是不一样的。您还声明setTimeout: var temp = s
var temp = setTimeout,
setTimeout = function() {};
他说由于JavaScript的提升,temp将是未定义的,我不明白为什么
它不应该是这样吗
var temp;
temp = setTimeout;
setTimeout = function() {};
那么为什么它没有定义呢?这是不一样的。您还声明
setTimeout
:
var temp = setTimeout,
setTimeout = function() {};
吊运至
var temp; // = undefined
var setTimeout; // = undefined
temp = setTimeout;
setTimeout = function() {};
用关键字var声明的变量的范围是其当前执行上下文。初始化变量时,javascript引擎默认将该变量初始化为未定义。 像 同样,当您在声明变量之前使用变量时,它现在处于运行上下文中。 例如:
console.log(a);
var a=10;
在本例中,javascript引擎以以下方式运行代码:
var a; // a = undefined
console.log(a); //
a =10;
它将变量声明拾取到执行上下文的顶部,但不拾取其值。这就是所谓的提升,你可能已经知道了
就你而言:
var temp = setTimeout,
setTimeout = 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;
它将所有声明的变量保持在堆栈顶部(不是它的值,而是初始化为未定义)
如果您想了解更多信息,请访问以下链接:
对于任何回答的人,请注意“设置超时”后第一段代码中的逗号+1我不太清楚你在问什么<在声明和定义
setTimeout
之前,先声明code>temp,然后将其初始化为未定义的值setTimeout
。但定义setTimeout
听起来也很糟糕,至少在浏览器环境中是这样,因为这是一个已经被使用的符号。我怀疑这就是发生的事情,但我不确定我是否也能解释清楚。;)
var temp; // temp = undefined
var setTimeout; // setTimeout = undefined
temp = setTimeout; // here temp is undefined as setTimeout is undefined
setTimeout =10;