【发布时间】:2017-08-03 23:23:01
【问题描述】:
我在 codeproject 上找到了这个闭包示例,但它没有解释它是如何工作的。
function getMultiplier(multiplyBy){
function multiply(num){
return multiplyBy * num;
}
return multiply;
}
var multiplyByTwo = getMultiplier(2);
var multiplyByTen = getMultiplier(10);
var twoIntoFive = multiplyByTwo(5);
var tenIntoSix = multiplyByTen(6);
console.log(twoIntoFive); // 10
console.log(tenIntoSix); // 60
现在我将用我的 C 大脑假设正在发生的事情。请纠正我或给出你的解释。
- javascript中的函数也可以是对象,所以内部函数multiply(num)是getMultiplier的一个方法,从外面看。
- var multiplyByTwo 在使用参数 2 调用时被赋予函数 getMultiplier 的返回值。
- 当您调用 getMultiplier(2) 时,javascript 解释器会根据 getMultiplier() 的定义在内存中创建一个对象。
- 该对象有一个方法 multiply,它的地址被分配给变量 multiplyByTwo。
- var twoIntoFive = multiplyByTwo(5);使用参数 5 调用 getMultiplier(2) 对象的方法 multiply(num)。
- 将简单的数字 10 返回到变量 twoIntoFive 中
- 乘以二 = 0;将使 javascript 的垃圾收集器从内存中删除对象 getMultiplier(2)。
【问题讨论】:
-
您可以参考此链接了解更多关于闭包的信息。 developer.mozilla.org/en/docs/Web/JavaScript/Closures
-
是的。只是 method 在这里被错误地使用(如果它是 js 对象意义上的对象)@downvoter 你是认真的吗??
-
@georg 不必要的关闭。请求重开。链接的问题解释了闭包的工作原理,但没有回答 op 的具体问题。
-
@TomM:这个骗局看起来很详尽,我怀疑有什么新东西要说,但让我们试一试吧!
标签: javascript closures