我有两个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}
到控制台。
我的问题是,关于()
末尾的闭合,我不了解什么。
答案 0 :(得分:0)
区别在于您是通过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));