锁定老帖子 主题:JS 闭包
该帖已经被评为新手帖
|
|
---|---|
作者 | 正文 |
发表时间:2009-09-01
Jamson 写道 <script> function outerFun() { var b=0; function innerFun() { a=1; alert(a); } return innerFun; //注意这里 } var obj=outerFun(); obj(); //结果为1 obj(); //结果为2 alert(outerFun.b); //结果为undefined alert(obj.b); //结果为undefined </script> 有人能为我解释一下:最后两个为什么是undefined嘛? Jamson 写道 obj(); //结果为1 obj(); //结果为2 结果都应为1 Jamson 写道 <
alert(outerFun.b); //结果为undefined alert(obj.b); //结果为undefined 因为outerFun是函数,obj是对函数的引用,b是函数内部的局部变量 不能像对象引用属性那样来引用它,也不可能 因而outerFun.b与obj.b都是undefined的 |
|
返回顶楼 | |
发表时间:2009-09-12
cocococoon 写道 Army 写道 最后一个例子还是不太明白,var声明不是被提前了么?
稍微修改一下最后一个例子的代码你就明白了: function outerFun() { alert(a); // got 4 a =0; alert(a); // got 0 } var a=4; outerFun(); alert(a); 还用一个例子你可能就更能理解了 function outerFun() { alert(a); // got 4 a =0; alert(a); // got 0 } outerFun(); //函数位于var定义变量之前 var a=4; alert(a); 这样的话就会报错,因为执行函数时,才会根据作用域需找定义的变量,此时的变量a还未定义 |
|
返回顶楼 | |
发表时间:2009-09-17
hanjs 写道 从最后的例子看
outerFun可以引入外部的变量,而函数块内部的变量如果与外部同名而且用var重定义了,说明是函数的内部变量,否则引入的则是outerFun所在作用预的同名变量. 这样的话我就明白了 |
|
返回顶楼 | |
发表时间:2009-09-18
闭包的这个还是第一次听说,长见识了。
作用域那个早就知道,还是自己试出来的,现在每用一个变量我都要var 定义,要不就会改变其它的值了。(for循环里的i最为明显,不明白的人可以写一个循环,在循环里调用另一个方法,在这个方法也也使用循环,循环变量都用i,你就会见到一个神奇的结果) |
|
返回顶楼 | |