您的位置:首页 > Web前端 > JavaScript

javascript块级作用域变量的声明

2014-01-15 13:53 141 查看
遇到一个问题:

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
这些块中定义的变量,实际在块之外也可以使用。

function functionScope(){
for(var i=0,l=5; i<l; i++){
var blockVariable = i;
}
alert(i); // 5
alert(blockVariable); // 4
}


1
2
3
4
5
6
7


例如上面的代码,在 for 这个块之中定义的变量,在 for 之外也可以使用。 这在其他支持块级作用域(如C/C++ [3], Java)的编程语言中是无法理解,甚至不可接受的。

不管是设计上的bug,还是有意为止。我们用的时候需要知道这一点,以免发生奇怪的事。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: