javascript是否实现了词法范围?

Zde*_*las 6 javascript local-variables

为什么这会返回2而不是1?似乎第二个"var"被默默忽略.

function foo()
{
  var local = 1;
  {
    var local = 2;
  }
  return local;
}
foo()
/*
2
*/
Run Code Online (Sandbox Code Playgroud)

Pra*_*thy 6

在javascript中只有功能级别范围和全局范围.您不能创建块范围,它不会添加任何特殊含义,也不会创建任何范围.

这就是你的代码结束的方式

function foo()
{
  var local = 1;
  local = 2;
  return local;
}
foo();
Run Code Online (Sandbox Code Playgroud)

在ES6中,您可以在Let的帮助下创建块级范围.ES6尚不支持.更多关于这里

  • 值得注意的是,词汇范围在不久的将来会出现ES6 let关键字. (2认同)

Den*_*ret 3

来自MDN

JavaScript 没有块语句作用域;相反,在块内声明的变量对于该块所在的函数(或全局范围)来说是本地的。

JavaScript 中变量的作用域是声明该变量的整个函数(或全局作用域),因此这里只有一个变量local

你的代码相当于

function foo()
{
  var local;
  local = 1;
  {
    local = 2;
  }
  return local;
}
foo()
Run Code Online (Sandbox Code Playgroud)

请注意,ES6(JavaScript 的新规范)确实引入了词法作用域let,但尚未真正可用