论坛首页 入门技术论坛

JS 闭包

浏览 26070 次
锁定老帖子 主题:JS 闭包
该帖已经被评为新手帖
作者 正文
   发表时间:2009-03-21  
shinelgz 写道
没有用var 声明的局部变量,都视为全局变量
function test(){
          i = 10;//全局变量
}
var i = 0;
test();
alert(i);//out: 10
上面这个函数就是闭包了。

太扯了

alert(i); ==》 这个i就是var i~~

自己调试去
0 请登录后投票
   发表时间:2009-03-21  
gecheng 写道
kimmking 写道
cocococoon 写道
Army 写道
最后一个例子还是不太明白,var声明不是被提前了么?


稍微修改一下最后一个例子的代码你就明白了:
function outerFun()  
{  
     alert(a);     // got 4
     a =0;  
     alert(a);     // got 0    
 }  
 var a=4;  
outerFun();  
alert(a);  




a就声明了一次而已。

这个啥也不能说明

你如果把函数function看成一个内部类就比较容易理解了


看做内部类的话,a还是一个外部变量而已。~
0 请登录后投票
   发表时间:2009-03-21  
你的头像图片吓了我一跳~~
js的语法太任意了 挺烦人的~~
0 请登录后投票
   发表时间:2009-03-21  
whaosoft 写道
你的头像图片吓了我一跳~~
js的语法太任意了 挺烦人的~~

吓着你了? 不好意思, 快换了.
0 请登录后投票
   发表时间:2009-03-21  

JS变量可以用var声明,也可以不用声明,区别就是如果在函数内部不用var声明的变量是全局变量,所以最后一个例子就很好理解了,这是js最最基础的问题。

 

0 请登录后投票
   发表时间:2009-03-22  
kimmking 写道
shinelgz 写道
没有用var 声明的局部变量,都视为全局变量
function test(){
          i = 10;//全局变量
}
var i = 0;
test();
alert(i);//out: 10
上面这个函数就是闭包了。

太扯了

alert(i); ==》 这个i就是var i~~

自己调试去


你没有调试,还说人家,这个解释明显是正确的呀。
0 请登录后投票
   发表时间:2009-03-22  
一直对闭包的概念非常模糊,现在有点清晰了。js语法太随意了,最后一个例子收获很大呀
0 请登录后投票
   发表时间:2009-03-23  
hunter4java 写道
kimmking 写道
shinelgz 写道
没有用var 声明的局部变量,都视为全局变量
function test(){
          i = 10;//全局变量
}
var i = 0;
test();
alert(i);//out: 10
上面这个函数就是闭包了。

太扯了

alert(i); ==》 这个i就是var i~~

自己调试去


你没有调试,还说人家,这个解释明显是正确的呀。


全局变量这个解释是对的,但使用了全局变量了后,test函数里i就不算闭包了,所以"上面这个行数就是闭包"这句是错地
0 请登录后投票
   发表时间:2009-03-23  
外面的function看成class就容易理解了。
0 请登录后投票
   发表时间: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就不算闭包了,所以"上面这个行数就是闭包"这句是错地


同意,这个不是闭包
只是函数里对一个全局变量的修改
0 请登录后投票
论坛首页 入门技术版

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