全局变量何时在Javascript中优先于函数范围?

时间:2017-11-10 05:57:18

标签: javascript global-variables local-variables

案例1: 以下代码警告 10

var globalId='10';  
function check(){  
    alert(globalId);  
}  
check();

案例2: 但是下一个代码警告 undefined

var globalId='10';  
function check(){  
    alert(globalId); 
    var globalId; 
}  
check();

对于案例2 解决方案是:

var globalId='10';  
function check(){  
    var globalId; /**moved to top of the function due to hoisting and has an initial value of undefined. Hence, alert(globalId) return undefined. **/

alert(globalId); //undefined
var globalId; 
}  
check();

我现在的问题是,案例1 globalId的价值如何10

3 个答案:

答案 0 :(得分:1)

从不。在JavaScript中,在当前函数作用域中声明的变量始终优先于在外部作用域中声明的变量。

在你的第二个例子中,

var globalId='10';  
function check(){  
    alert(globalId); 
    var globalId; 
}  
check();

解释器会自动将您的var globalId声明移至顶部,从而产生:

var globalId='10';  
function check(){  
    var globalId;
    alert(globalId);
}  
check();

这就是为什么它显示undefined

答案 1 :(得分:0)

  

我现在的问题是,在案例1中,globalId的值是10?

由于

  • 在JavaScript中,变量是函数(如果使用var声明)或作用域(如果使用let或const声明)。
  • 未使用varletconst来定位变量的范围

因此,它使用了定义函数check的范围。

答案 2 :(得分:0)

它正在提升概念。查看有助于您理解概念Scope & Hoisting One more good article的链接。 快乐编码