跪求 JavaScript高手 帮忙,谁能给说说下面一段代码 到底是什么意思。我知道结果。我想知道原理。

[复制链接]
查看11 | 回复4 | 2013-1-8 14:42:09 | 显示全部楼层 |阅读模式
function a(){
var i=0;
function b(){
alert(++i);
}
return b;}这段代码涉及到闭包的问题:当在内嵌函数中使用外部函数作用域内的变量时,就是使用了闭包可以看出a函数里嵌套的b函数使用了外部的i变量,于是闭包产生了在上述代码中,每调用一次a函数,就会创建一个新的作用域链和私有变量var c = a(); //这里c调用了一次a,产生了一个作用域链,单独的放在内存中a()();
//这里也是调用了立即执行的函数,所谓立即执行函数,就是执行完了就不在内存中了a();
...
回复

使用道具 举报

千问 | 2013-1-8 14:42:09 | 显示全部楼层
先看a()(),后面的括表示产即执行a函数在a函数执行完后返回了b函数,所以这个实际上执行的是b(),也就是说a()这一步所得到的值是b,再加一个括号就是执行b()了,通过alert(a()())可以知道结果是i的值加上1,也就是0+1=1a()这个和上面的一样,就是b,通过alert(a())会发现弹出的代码是function b(...
回复

使用道具 举报

千问 | 2013-1-8 14:42:09 | 显示全部楼层
b是个变量,不会执行里面的代码,就像你把 b 赋值给 x ,即 var x = b;它只是个变量,你需要加括号才是调用,var c = a();这句话等同于 var c = b; a()(),其中因为a()返回的是函数b对象,所以该代码等同于 b();同理 a() 是不会有弹窗的;c() 等同于 b(),所以调用了b函数而每一次 i 一开始都...
回复

使用道具 举报

千问 | 2013-1-8 14:42:09 | 显示全部楼层
代码涉及了闭包的概念。 其实的局部变量 i 就行成了闭包。 关于闭包,你可以另外找更好的资料来学习。 我的理解就是,被外部继续引用的已经结束了的函数内部的局部变量。 如果函数a的返回值没有引用这个i,那么这 i 会在函数体执行后销毁。 但函数a返回了一个函数,这个函数引用了 i ,那么这个 i 不会被销毁,而成了一个特...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行