gpt4 book ai didi

JavaScript:自调用函数返回一个闭包。它是做什么用的?

转载 作者:数据小太阳 更新时间:2023-10-29 05:10:28 24 4
gpt4 key购买 nike

在研究一个 JavaScript 库时,我发现了以下结构:

theMethod: function () {
var m1 = new SomeClass();
return function (theParameter) {
this.someMethod();
m1.methodCall(this.someField1);
this.someField2 = 'some value';
}
}()

方法调用如下:

c.theMethod(paramValue);

作者想通过这个声明表达什么?

为什么不使用这样的声明:

theMethod: function (theParameter) {
var m1 = new SomeClass();
this.someMethod();
m1.methodCall(this.someField1);
this.someField2 = 'some value';
}

最佳答案

在函数外声明变量使得函数每次都使用同一个对象。

一个示例(为简单起见,使用整数而不是对象):

var c = { 
theMethod: function () {
var m1 = 0;
return function (theParameter) {
m1++;
console.log( m1 );
}
}()
};

c.theMethod(); c.theMethod(); // output: 1 2


var d = {
theMethod: function () {
return function (theParameter) {
var m1 = 0;
m1++;
console.log( m1 );
}
}()
};

d.theMethod(); d.theMethod(); // output: 1 1

自调用函数是这样工作的:

var c = { 
theMethod: function () {
var m1 = 0;
return function (theParameter) {
m1++;
console.log( m1 );
}
}()
};

当创建对象 c 时,自调用函数调用自身并且 theMethod 现在等于该函数的返回值。在这种情况下,返回值是另一个函数。

c.theMethod = function( theParameter ) {
m1++;
console.log( m1 );
};

变量 m1 可用于该函数,因为它在函数定义时处于范围内。

从现在开始,当您调用 c.theMethod() 时,您总是在执行自调用函数返回的内部函数,该函数本身仅在声明对象时执行一次.

自调用函数就像任何函数一样工作。考虑:

var c = { 
theMethod: parseInt( someVariable, 10 )
};

您不希望每次使用c.theMethod 变量时都执行parseInt()。将 parseInt 替换为原始函数中的匿名函数,它完全一样。

关于JavaScript:自调用函数返回一个闭包。它是做什么用的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17235259/

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