遇到一个问题:
if(1==1){var a=11;}else{var a=2;}{var a=3;}console.log(a);
你才打印什么?
如果你的答案不是3,那么就有跟我一样的问题。
js中块级作用域变量怎么互相影响了。块级作用域就是用{}括起来的区域。在c系列语言中,这里面定义的都是块级域变量,或者说局部变量,不会影响外部,也不能被外部引用到。
下面这段话是我从网上搜到的,算是给出了解答
《JavaScript 权威指南》第 4 章 4.3.1 小节 [2] 详细分析了块级作用域中变量定义的问题。
由于 JavaScript 只有函数作用域,没有块级作用域,因此在 for
, if/else
, do/while
, switch/case
,try/catch
这些块中定义的变量,实际在块之外也可以使用。
例如上面的代码,在 for 这个块之中定义的变量,在 for 之外也可以使用。 这在其他支持块级作用域(如C/C++ [3], Java)的编程语言中是无法理解,甚至不可接受的。
不管是设计上的bug,还是有意为止。我们用的时候需要知道这一点,以免发生奇怪的事。