javascript是否实现词法作用域

Does javascript implement lexical scoping?

本文关键字:作用域 词法 实现 是否 javascript      更新时间:2023-09-26

为什么返回2而不是1?第二个"var"似乎被忽略了。

function foo()
{
  var local = 1;
  {
    var local = 2;
  }
  return local;
}
foo()
/*
2
*/
javascript中只有函数级作用域和全局作用域。您无法创建块作用域,它没有添加任何特殊含义,也不会创建任何作用域。

这就是你的代码最终的

function foo()
{
  var local = 1;
  local = 2;
  return local;
}
foo();

在ES6中,您可以在Let的帮助下创建块级作用域。ES6还不受支持。更多关于这里

来自MDN:

JavaScript没有块语句作用域;更确切地说,是一个变量在块中声明的是函数的局部(或全局范围)块所在的。

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

你的代码相当于

function foo()
{
  var local;
  local = 1;
  {
    local = 2;
  }
  return local;
}
foo()

请注意,ES6(JavaScript的新规范)确实引入了let的词法范围,但它还没有真正可用。