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 这个块之中定义的变量,在 for 之外也可以使用。 这在其他支持块级作用域(如C/C++ [3], Java)的编程语言中是无法理解,甚至不可接受的。
不管是设计上的bug,还是有意为止。我们用的时候需要知道这一点,以免发生奇怪的事。
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,还是有意为止。我们用的时候需要知道这一点,以免发生奇怪的事。
相关文章推荐
- JavaScript踩坑小计——变量的作用域和类型声明
- JS作用域为“函数级作用域”,记住最简明的一句“函数中声明的所有变量,无论是在哪里声明的,在整个函数中它们都是有定义的。”QQ253079952
- 变量的声明,变量的作用域和生存期
- JavaScript在执行代码之前会校验代码,声明变量提前至当前作用域最前面。
- PHP变量的声明及其作用域&静态变量
- es5与es6的变量声明和作用域的异同
- Java变量的声明、初始化和作用域
- Java变量的声明、初始化和作用域
- 深入浅出理解JavaScript函数作用域和变量声明提前
- js声明变量的三种方式及作用域
- JavaScript中的作用域与函数和变量声明的提升
- js变量声明提升,变量作用域与函数作用域,作用域链
- javascript中未声明自定义变量的作用域
- javascript函数作用域和变量声明提前(variable hoisting)
- javascript 变量声明 和 作用域
- 黑马程序员_object c学习日记①_类的声明定义、点语法及成员变量作用域
- Go语言:变量声明,作用域,指针
- JavaScript 函数总体概述(函数声明/参数传递/返回值/加载/变量和作用域/变量声明提升/匿名函数/回调函数)
- 翻译 - JavaScript中的作用域与变量声明提升
- JS中var关键字声明的变量的作用域