【发布时间】:2015-01-09 00:14:40
【问题描述】:
为什么返回 2 而不是 1?似乎第二个“var”被默默地忽略了。
function foo()
{
var local = 1;
{
var local = 2;
}
return local;
}
foo()
/*
2
*/
【问题讨论】:
标签: javascript local-variables
为什么返回 2 而不是 1?似乎第二个“var”被默默地忽略了。
function foo()
{
var local = 1;
{
var local = 2;
}
return local;
}
foo()
/*
2
*/
【问题讨论】:
标签: javascript local-variables
来自the MDN:
JavaScript 没有块语句范围;而是一个变量 在块中声明的对于函数(或全局范围)来说是本地的 该块位于其中。
JavaScript 中变量的作用域是声明它的整个函数(或全局作用域),所以这里只有一个变量local。
你的代码相当于
function foo()
{
var local;
local = 1;
{
local = 2;
}
return local;
}
foo()
请注意,ES6(JavaScript 的新规范)确实引入了 lexical scoping with let 但 it's not yet really available。
【讨论】: