gpt4 book ai didi

javascript - Javascript 中闭包的具体用途是什么?

转载 作者:行者123 更新时间:2023-11-28 09:04:38 26 4
gpt4 key购买 nike

嗨,我仍然不确定在 javascript 中使用闭包的确切用法。我对闭包有一些想法“闭包是一个内部函数,可以访问外部(封闭)函数的变量——作用域链”。但是我不知道为什么我们在 JavaScript 中使用闭包。

最佳答案

这是因为information hiding .

var myModule = (function (){

var privateClass = function (){};
privateClass.prototype = {
help: function (){}
};

var publicClass = function (){
this._helper = new privateClass();
};
publicClass.prototype = {
doSomething: function (){
this._helper.help();
}
};

return {
publicClass: publicClass
};

})();

var instance = new myModule.publicClass();
instance.doSomething();

在 javascript 中,您没有具有 ppp(公共(public)、 protected 、私有(private))属性的类,因此您必须使用闭包来隐藏信息。在类级别上,这将非常昂贵,因此为了获得更好的代码质量,您唯一可以做的就是在模块级别上使用闭包,并在该闭包中使用私有(private)帮助器类。所以闭包是为了信息隐藏。它并不便宜,它会消耗资源(内存、CPU 等),所以你必须在适当的地方使用闭包。因此,永远不要在类级别上使用它来隐藏信息,因为这样做成本太高。

bind 的另一种用法通过使用回调来调用实例的方法。

Function.prototype.bind = function (context){
var callback = this;
return function (){
return callback.apply(context, arguments);
};
};

绑定(bind)函数的典型用法是异步调用:defer、ajax、事件监听器等...

var myClass = function (){
this.x = 10;
};
myClass.prototype.displayX = function (){
alert(this.x);
};

var instance = new myClass();
setTimeout(instance.displayX.bind(instance), 1000); //alerts "x" after 1 sec

关于javascript - Javascript 中闭包的具体用途是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17313737/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com