我有两个javascript闭包,我试图理解为什么一个人会接受并输入一个特定的语法,另一个将拒绝。
function multiply(factor) {
var ace = (function(number) {
return number*factor;
});
return ace;
}
var yup = multiply(4);
console.log(yup(5));
这将20输出到控制台。
我的第二个关闭是
var k = 3;
var add = (function () {
console.log(k);
var counter = k;
return function (j) {counter += 1; return counter*j}
})(k);
add();
console.log(add(5));
输出应该是20。
如果我尝试使用的语法,我有这个问题
(function() {
})(number);
在第一个闭包中它不起作用并输出“数字未定义”如果我尝试输入第二个闭包
(function (k) {
var counter = k;
return function (j) {counter += 1; return counter*j}
});
我出去了
function (j) {counter += 1; return counter*j}
到控制台。
我的问题是,我不了解最后关闭()
的闭塞器。
不同之处在于您是通过IIFE立即创建闭包,还是在调用时创建闭包的函数。
你用第二种风格写的第一个片段就是
var yup = (function multiply(factor) {
return function ace(number) {
return number*factor;
};
})(4); // the multiply(4) call is inlined into the statement with the definition
console.log(yup(5));
你用第一种风格写的第二个片段就是
function makeAdd(k) {
console.log(k);
var counter = k;
return function (j) {
counter += 1;
return counter*j;
}
}
var add = makeAdd(3);
add();
console.log(add(5));