Does javascript implement lexical scoping?
本问题已经有最佳答案,请猛点这里访问。
为什么返回2而不是1?似乎第二个"var"被悄悄地忽略了。
1 2 3 4 5 6 7 8 9 10 11 12 | function foo() { var local = 1; { var local = 2; } return local; } foo() /* 2 */ |
在javascript中,只有函数级作用域和全局作用域。不能创建块范围,它不添加任何特殊含义,也不创建任何范围。
你的代码就是这样结束的
1 2 3 4 5 6 7 | function foo() { var local = 1; local = 2; return local; } foo(); |
在ES6中,您可以在let的帮助下创建块级作用域。尚不支持ES6。这里有更多的内容
从MDN:
JavaScript does not have block statement scope; rather, a variable
declared within a block is local to the function (or global scope)
that the block resides within.
javascript中变量的作用域是声明它的整个函数(或全局作用域),因此这里只有一个变量
您的代码等价于
1 2 3 4 5 6 7 8 9 10 | function foo() { var local; local = 1; { local = 2; } return local; } foo() |
请注意,ES6(新的javascript规范)确实引入了使用