Javascript闭包无法持续接受输入

时间:2019-03-18 21:48:47

标签: javascript syntax closures

我有两个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}

到控制台。

我的问题是,关于()末尾的闭合,我不了解什么。

1 个答案:

答案 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));