锁定老帖子 主题:JS 闭包
该帖已经被评为新手帖
|
|
---|---|
作者 | 正文 |
发表时间:2009-03-21
shinelgz 写道 没有用var 声明的局部变量,都视为全局变量
function test(){ i = 10;//全局变量 } var i = 0; test(); alert(i);//out: 10 上面这个函数就是闭包了。 太扯了 alert(i); ==》 这个i就是var i~~ 自己调试去 |
|
返回顶楼 | |
发表时间: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还是一个外部变量而已。~ |
|
返回顶楼 | |
发表时间:2009-03-21
你的头像图片吓了我一跳~~
js的语法太任意了 挺烦人的~~ |
|
返回顶楼 | |
发表时间:2009-03-21
whaosoft 写道 你的头像图片吓了我一跳~~
js的语法太任意了 挺烦人的~~ 吓着你了? 不好意思, 快换了. |
|
返回顶楼 | |
发表时间:2009-03-21
JS变量可以用var声明,也可以不用声明,区别就是如果在函数内部不用var声明的变量是全局变量,所以最后一个例子就很好理解了,这是js最最基础的问题。
|
|
返回顶楼 | |
发表时间:2009-03-22
kimmking 写道 shinelgz 写道 没有用var 声明的局部变量,都视为全局变量
function test(){ i = 10;//全局变量 } var i = 0; test(); alert(i);//out: 10 上面这个函数就是闭包了。 太扯了 alert(i); ==》 这个i就是var i~~ 自己调试去 你没有调试,还说人家,这个解释明显是正确的呀。 |
|
返回顶楼 | |
发表时间:2009-03-22
一直对闭包的概念非常模糊,现在有点清晰了。js语法太随意了,最后一个例子收获很大呀
|
|
返回顶楼 | |
发表时间: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就不算闭包了,所以"上面这个行数就是闭包"这句是错地 |
|
返回顶楼 | |
发表时间:2009-03-23
外面的function看成class就容易理解了。
|
|
返回顶楼 | |
发表时间: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就不算闭包了,所以"上面这个行数就是闭包"这句是错地 同意,这个不是闭包 只是函数里对一个全局变量的修改 |
|
返回顶楼 | |