js中的块作用域
今天我们来一起研究下JavaScript中的变量作用域问题,话不多说,直接上代码。
1 <script type="text/javascript"> 2 (function(){ 3 for(var i = 0; i < 5; i++){ 4 console.log(i); 5 } 6 console.log(i); 7 })() 8 </script>
这是一个很简单的for循环,打印出i的值,就是循环的次数。在一些高级语言中,比如说java,c,c++等,结果会是0,1,2,3,4,然后运行到第六行的时候就会报错了。但是在JavaScript中却是有点不一样的,运行结果如下。
多出了一个5,为什么会这样呢?原因是这样的,因为JavaScript中是没有块级作用域这个概念的,所以在循环执行完毕后,i在当前方法内还是有效的,因此执行完最后一次++后,i的值就变成了5。
那么我们有没有什么方法可以让JavaScript像高级语言中一样有块级作用域呢?方法是有的,代码如下:
1 <script type="text/javascript"> 2 (function(){ 3 (function(){ 4 for(var i = 0; i < 5; i++){ 5 console.log(i); 6 } 7 })() 8 console.log(i); 9 })() 10 </script>
输出的结果是这样的,
我们可以看到i is not defined。这说明现在i已经不存在了。分析一下原因,(function(){})()这种写法叫作立即执行函数,在这个函数内部的function拥有自己的作用域。因此,在循环完成后,再去访问i就会产生如上的报错信息了。
欢迎交流,QQ: 997494167