9

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

函数foo(){var局部=1;{局部变量=2;}返回本地;}foo()/*2*/
1

2个答案2

重置为默认值
6

在javascript中,只有函数级作用域和全局作用域。您不能创建块作用域,它不会添加任何特殊含义,也不会创建任何作用域。

你的代码就是这样结束的

函数foo(){var局部=1;局部=2;返回本地;}foo();

在ES6中,您可以在以下帮助下创建块级作用域尚不支持.ES6。更多信息在这里

1
  • 2
    应该注意的是,词汇范围将在不久的将来与ES6let关键字一起出现。
    – 卡帕吉
    评论 2014年11月12日8:10

发件人MDN:

JavaScript没有块语句范围;而是一个变量块中声明的是函数的局部(或全局范围)块所在的位置。

JavaScript中变量的范围是声明它的整个函数(或全局范围),因此只有一个变量地方的在这里。

您的代码相当于

函数foo(){var局部;局部=1;{局部=2;}返回本地;}foo()

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

  • 它可用于firefox和nodejs的和谐。 评论 2014年11月12日10:34
  • 1
    @simonzack你没注意到我链接到Kangax桌子吗?除非OP正在编写服务器端代码,否则他真的负担不起与IE和Chrome的不兼容,这就是为什么我说“不可用”。 评论 2014年11月12日10:41
  • 啊,我明白了,我没有点击你的链接。 评论 2014年11月12日11:03

不是你想要的答案吗?浏览标记的其他问题问你自己的问题.