Cin*_*ndy 3 javascript variables scope
JavaScript指南中有一个关于变量范围的句子:"JavaScript中的变量在某种意义上"被提升"或被提升到函数或语句的顶部.但是,未初始化的变量将返回未定义的值."
/**
* Example 2
*/
// will return a value of undefined
var myvar = "my value";
(function() {
console.log(myvar); // undefined
var myvar = "local value";
})();
Run Code Online (Sandbox Code Playgroud)
我的问题是:为什么"console.log(myvar);"将返回undefined?我认为第一行已经将myvar初始化为"我的价值".
因为所有变量声明都自动提升到其定义功能块的顶部,所以此代码:
(function() {
console.log(myvar); // undefined
var myvar = "local value";
})();
Run Code Online (Sandbox Code Playgroud)
实际上这是JS解释器:
(function() {
var myvar; // declares a new local variable that covers up the global name
console.log(myvar); // undefined
myvar = "local value";
})();
Run Code Online (Sandbox Code Playgroud)
哪个应该显示为什么本地定义的myvar
是什么console.log()
输出和它已被定义,但尚未初始化,因此它显示为undefined
.
本地定义的myvar
覆盖/覆盖全局定义的覆盖,因此当您myvar
在函数中访问时,您只获取本地定义的变量(无论它是否已初始化).
查看有关同一主题的其他参考资料:
如果你删除var
你的函数(所以你只是引用一个变量,而不是声明一个新变量),那么你只会有一个名为的全局变量myvar
,你会得到它看起来像你可能期望的行为:
var myvar = "my value";
(function() {
console.log(myvar); // outputs "my value"
myvar = "local value";
})();
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
916 次 |
最近记录: |