【发布时间】:2020-03-13 02:08:11
【问题描述】:
我想了解匿名自调用函数能够保持变量的最后更新状态的方式,但为什么在普通匿名函数的情况下不可能。这两个函数都是闭包 在保持先前的变量状态的同时仍然表现不同。 例如:
var selfInvokingfunc= (function () {
var a=2;
var myprivatefunction = function () {
a=a+2;
console.log(a);
}
return {
mypublicfunction : function () {
myprivatefunction();
}
}
})();
selfInvokingfunc.mypublicfunction() ;//a is 4
selfInvokingfunc.mypublicfunction(); // a is 6
var nonSelfInvokingAnonymousFunction = function () {
var a=2;
var myprivatefunction = function () {
a=a+2;
console.log(a);
}
return {
mypublicfunction : function () {
myprivatefunction();
}
}
};
nonSelfInvokingAnonymousFunction().mypublicfunction(); //a is 2
nonSelfInvokingAnonymousFunction().mypublicfunction(); //a is 2
同样适用于非自调用,如果调用为:
var temp=nonSelfInvokingAnonymousFunction();
temp.mypublicfunction() ; // a is 4
temp.mypublicfunction(); // a is 6
请帮我理解一下。
【问题讨论】:
-
selfInvokingfunc尽管有变量名,但它不是函数。它只是保存 IIFE 返回的对象 - 真的很像第三个 sn-p 中的temp变量。 -
那是因为你再次执行
nonSelfInvokingAnonymousFunction,当它是 2 两次。请注意,您不必调用您的selfInvokingfunc,它实际上返回一个 Object,该 Object 具有返回另一个函数的函数属性。
标签: javascript scope closures self-invoking-function