从我查找的每个定义中,闭包是在另一个函数中创建或声明函数的时候。这方面的博客和网站都有很多例子。但是当函数在另一个函数之外声明,但是在函数内调用然后调用时呢?例如:
const add = (x,y) => {
return x + y;
};
const double = num => {
return add(num,num)
};
let a = double(6);/*?*/
add(num,num)是否创建了闭包?如果是这样,请帮助我理解原因。
答案 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
函数创建的作用域)。
外部函数范围内的任何内容也都在内部函数的范围内,并且在返回内部函数时仍然如此。