可怜的js居然没有块级作用域
来源:互联网 发布:室内设计用哪些软件 编辑:程序博客网 时间:2024/04/28 12:02
js中在一个函数中定义一个for循环:for(var i=0;i<5;i++) 其中的i并不会随着for循环的结束就销毁,i会一直存在该函数中,这就是js和其他语言的区别,也就是js没有块级作用域的概念。看以下代码:
function test(){for(var i=0;i<5;i++){alert(i);}alert('last_i: '+i);}test();
运行以上代码,执行for循环会弹出5次窗口分别为0,1,2,3,4。执行到4意味着for循环结束,其他语言下i就会销毁,执行alert(‘last_i:’ +i)按理说会为undefined,但js中不是,i会一直存在函数中,也就是说执行到alert(‘last_i :’ +i)时会弹出last_i: 5 。而这个5就是经过for循环累加后的i。
怎样实现js的块级作用域呢?那就是匿名函数。在匿名函数中定义的任何变量都会在执行结束后销毁,这样就很类似其他语言中的for循环中的i在执行循环后销毁i。此处的匿名函数是要自执行的,也就是(function(){......})()这种形式,两个()(),前一个放函数体,后一个代表‘执行’的意思,就像普通的函数调用,当然了也可以放参数如:(函数体)(参数)。用匿名函数模仿块级作用域的代码如下:
function test(){(function(){ //匿名函数中定义的所有变量都会在执行结束时被销毁for(var i=0;i<5;i++)alert(i);})()alert(i);//报错,不识别i}test();
此时定义在匿名函数中的for循环,在函数阶数后就销毁i,此时代码alert('last_i:'+i)运行就会报错。这样就和其他语言中的块级作用域一样。
0 0
- 可怜的js居然没有块级作用域
- js没有块级作用域
- js没有块级作用域
- tips:js没有块级作用域。
- js没有块级作用域
- 没有块级作用域的javascript...
- 17.js中没有块级作用域
- 没有块级作用域
- 没有块级作用域
- 没有块级作用域
- js的块级作用域问题
- JS的模仿块级作用域
- 关于JavaScript没有块级作用域的分析
- js的函数作用域跟块级作用域
- JavaScript没有块级作用域
- javascript没有块级作用域
- JavaScript没有块级作用域
- javascript 没有块级作用域
- 美日汇
- android的bluetooth
- MPlayer
- Erlang 单元测试
- 写在Android开发之初
- 可怜的js居然没有块级作用域
- 公交路线查询
- 『IOS』How to deal with Icon@2x.png in svn?
- 唐崇荣牧师谈灵恩派
- BASH解析网HTML的尝试
- spring mvc 拦截器
- tripleo之Ironic_python_agent的学习(一)
- 决策树c4.5(python3字典各种方法,map(),集合set()等,python树节点)
- linux shell