首页 > 网站 > WEB开发 > 正文

JavaScript闭包学习

2024-04-27 15:12:23
字体:
来源:转载
供稿:网友

昨天在掘金上看到一篇关于闭包基础学习的文章javaScript闭包入门

我对闭包的理解:一个函数嵌套另一个函数,子函数返回父函数的值,使得在函数外部也可以访问到函数内部的变量。

其中有一个梨子:

function buildList(list) {    var result = [];    for (var i = 0; i < list.length; i++) {        var item = 'item' + i;        result.push( function() {console.log(item + ' ' + list[i])} );//匿名闭包函数    }    return result;}function testList() {    var fnlist = buildList([1,2,3]);    // 使用j是为了防止搞混---可以使用i    for (var j = 0; j < fnlist.length; j++) {        fnlist[j]();    }} testList() //输出 "item2 undefined" 3 次
result.push( function() {console.log(item + ' ' + list[i])}这一行给result数组添加了三次函数匿名引用。如果你不熟悉匿名函数可以想象成下面代码:pointer = function() {console.log(item + ' ' + list[i])};result.push(pointer);注意,当你运行上述代码的时候会打印"item2 undefined"三次!和buildList的局部变量对应的闭包只有一个。
当匿名函数在fnlist[j]()这一行调用的时候,他们使用同一个闭包,而且是使用的这个闭包里i和item现在的值(循环结束后i的值为3,item的值为'item2')。
注意:我们从索引0开始,所以item最后的值为item2',i的值会被i++增加到3 。


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表