在另一个函数中调用(未声明)函数时是否创建闭包,如果是,为什么?

时间:2017-12-21 21:57:21

标签: javascript closures

从我查找的每个定义中,闭包是在另一个函数中创建或声明函数的时候。这方面的博客和网站都有很多例子。但是当函数在另一个函数之外声明,但是在函数内调用然后调用时呢?例如:

const add = (x,y) => {
  return x + y;
};

const double = num => {
  return add(num,num)
};

let a = double(6);/*?*/

add(num,num)是否创建了闭包?如果是这样,请帮助我理解原因。

1 个答案:

答案 0 :(得分:1)

闭包是 lexical scope 的产品。

  

闭包是函数和词法环境的组合   宣布该职能的地方。

您必须在另一个函数中定义一个函数来创建一个闭包。

在您的示例中,您只需调用一个调用另一个函数并使用其返回值的函数。 double函数在任何时候都不能访问add函数的范围:它们的范围是不同的。

以下是JavaScript闭包的经典示例

var makeAdder = function(x) {
    return function(y) {
        return x + y;
    };
}

var add5 = makeAdder(5);
var add10 = makeAdder(10);

console.log(add5(2));  // 7
console.log(add10(2)); // 12

在这两种情况下,makeAdder返回的函数“记住”创建的外部作用域(由makeAdder函数创建的作用域)。

外部函数范围内的任何内容也都在内部函数的范围内,并且在返回内部函数时仍然如此。