JavaScript实现词法作用域吗?

24 浏览
0 Comments

JavaScript实现词法作用域吗?

这个问题已经有答案了

JavaScript中变量的作用域是什么?

\"let\"和\"var\"有什么区别?

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

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

admin 更改状态以发布 2023年5月23日
0
0 Comments

来自 MDN :

JavaScript 没有块级作用域;相反,声明在块中的变量局限于包含该块的函数(或全局作用域)。

在 JavaScript 中,变量的作用域是指在它声明的整个函数中(或全局作用域)生效,因此在此处只有一个名为 local 的变量。

你的代码相当于

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

请注意,ES6(JavaScript 的新标准)引入了 let 的词法作用域,但 目前尚不支持

0
0 Comments

Javascript中只有函数级作用域和全局作用域。你不能创建一个块级作用域,它也没有任何特殊含义,不会创建任何作用域。

这就是你的代码的结果

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

在ES6中,可以借助let创建块级作用域。ES6目前还不被支持。更多内容请在此了解。

0