锁定老帖子 主题:JS 闭包
该帖已经被评为新手帖
|
|
---|---|
作者 | 正文 |
发表时间:2009-03-24
leiliang 写道 hunter4java 写道 kimmking 写道 shinelgz 写道 没有用var 声明的局部变量,都视为全局变量
function test(){ i = 10;//全局变量 } var i = 0; test(); alert(i);//out: 10 上面这个函数就是闭包了。 太扯了 alert(i); ==》 这个i就是var i~~ 自己调试去 你没有调试,还说人家,这个解释明显是正确的呀。 全局变量这个解释是对的,但使用了全局变量了后,test函数里i就不算闭包了,所以"上面这个行数就是闭包"这句是错地 ie7 vs.net脚本调试器。 证明只有一个i。 函数内的没有声明过i。只是调用外部的i~ |
|
返回顶楼 | |
发表时间:2009-03-24
---------“没有用var 声明的局部变量,都视为全局变量 “
问题是,i明明在test()前,就声明了。所以不在此列。~~ |
|
返回顶楼 | |
发表时间:2009-03-24
cocococoon 写道 Army 写道 最后一个例子还是不太明白,var声明不是被提前了么?
稍微修改一下最后一个例子的代码你就明白了: function outerFun() { alert(a); // got 4 a =0; alert(a); // got 0 } var a=4; outerFun(); alert(a); 改成这样也许更容易理解,函数的声明在前在后没有关系,只跟调用有关 var a=4; outerFun(); alert(a); function outerFun() { alert(a); // got 4 a =0; alert(a); // got 0 } |
|
返回顶楼 | |
发表时间:2009-03-25
javascript是按一块一块的方法执行的
|
|
返回顶楼 | |
发表时间:2009-03-25
这不就是一个全局变量和局部变量的问题吗,在实际中应用的不多,所以自我感觉没有必要掌握,只应学习拓展
|
|
返回顶楼 | |
发表时间:2009-03-25
1、JavaScript按块来解释执行
2、同一块中,function前后顺序没有关系 3、全局变量的问题,请看hax大神blog的有奖问答帖~~ |
|
返回顶楼 | |
发表时间:2009-03-25
看明白了,就是个变量作用域的关系
最后那个a开始是赋值为4了,后来进入outerFun,赋值为0就改变了全局作用域的a,所以下面也是0 但下面两个例子和前两个例子有什么关系呢。。闭包一般用在什么场合? |
|
返回顶楼 | |
发表时间:2009-03-31
最后一个例子无关闭包这个概念吧
只是跟代码的解析/执行顺序,以及变量的作用域有关 看一下犀角书,理解起来不难的应该 |
|
返回顶楼 | |
发表时间:2009-04-01
至于最后一个问题。其实就是一个变量作用域的问题。有全局变量,和局部变量。
|
|
返回顶楼 | |
发表时间:2009-04-05
定义时和运行时分开,就好懂了。
|
|
返回顶楼 | |