Javascript关闭不一致地输入

问题描述 投票:0回答:1

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

到控制台。

我的问题是,我不了解最后关闭()的闭塞器。

javascript syntax closures
1个回答
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));
© www.soinside.com 2019 - 2024. All rights reserved.