论坛首页 入门技术论坛

JS 闭包

浏览 26072 次
锁定老帖子 主题: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~
0 请登录后投票
   发表时间:2009-03-24  
---------“没有用var 声明的局部变量,都视为全局变量 “


问题是,i明明在test()前,就声明了。所以不在此列。~~


0 请登录后投票
   发表时间: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      
}
0 请登录后投票
   发表时间:2009-03-25  
javascript是按一块一块的方法执行的
0 请登录后投票
   发表时间:2009-03-25  
这不就是一个全局变量和局部变量的问题吗,在实际中应用的不多,所以自我感觉没有必要掌握,只应学习拓展
0 请登录后投票
   发表时间:2009-03-25  
1、JavaScript按块来解释执行
2、同一块中,function前后顺序没有关系
3、全局变量的问题,请看hax大神blog的有奖问答帖~~
0 请登录后投票
   发表时间:2009-03-25  
看明白了,就是个变量作用域的关系

最后那个a开始是赋值为4了,后来进入outerFun,赋值为0就改变了全局作用域的a,所以下面也是0

但下面两个例子和前两个例子有什么关系呢。。闭包一般用在什么场合?
0 请登录后投票
   发表时间:2009-03-31  
最后一个例子无关闭包这个概念吧
只是跟代码的解析/执行顺序,以及变量的作用域有关
看一下犀角书,理解起来不难的应该
0 请登录后投票
   发表时间:2009-04-01  
至于最后一个问题。其实就是一个变量作用域的问题。有全局变量,和局部变量。
0 请登录后投票
   发表时间:2009-04-05  
定义时和运行时分开,就好懂了。
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics