Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript中的提升_Javascript_Hoisting - Fatal编程技术网

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;