javascript - instance是一个闭包么?求解
大家讲道理
大家讲道理 2017-04-11 09:58:44
[JavaScript讨论组]
var test = function() {
    var val = 0;

    var add = function(num) {
        val += num;
        return val;
    };
    return add;
};


var instance = test();

console.log(instance(3)); // 3
console.log(instance(4)); // 7

看了一个资料,说instance 是一个闭包。由 add 函数, 和创建 add 函数时的环境(变量 val)组成,不理解......

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全部回复(3)
PHP中文网

instance是什么?是test函数的返回值。
test函数的返回值是什么?是add
add是什么?add是个函数。
所以instancetest返回的一个函数。

这个函数是不是闭包?只要看函数里有没引用到函数定义外面的变量就可以了。
add的定义,发现用到了在外面的val,所以是个闭包。

当然不是所用引用了外部变量的就是闭包,引用的外部变量的函数还要被返回到外部作用域外的地方。

PHP中文网

简单说,就是一个子函数引用了外部作用域(父函数)的变量时,就创建了闭包。 在这个例子中,add是子函数,val是test(父函数)声明的变量,满足条件。

闭包有两个好处:
1,正常函数作用域,父层是不能访问子层的,但闭包里子函数可以通过return返回内容,从而被外部访问到。
2,闭包避免了js的垃圾回收机制,可以常驻内存。

天蓬老师

是一个闭包。

简单来看,在一个函数中返回了另一个函数就是闭包。

然后,复杂点的分析就是:闭包是指那些能够访问独立(自由)变量的函数 (变量在本地使用,但定义在一个封闭的作用域中)。
test 函数创建了一个私有的作用域,然后这个这里面有个add方法,可以访问这个私有作用域中的变量val。

https://developer.mozilla.org...

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号