我从这个wiki得到了这个代码片段
// Return a list of all books with at least 'threshold' copies sold.
function bestSellingBooks(threshold) {
return bookList.filter(
function (book) { return book.sales >= threshold; }
);
}
维基页面指出这是一个关闭的示例。
这个片段中的闭包在哪里?
据我所知,闭包由两个关键属性组成,一个返回的函数和一个创建该函数的环境。
此外,应该有一些变量的生命周期超出了创建它的函数的范围。
最佳答案
我简化了代码以使概念更加清晰。
var threshold = 50;
var retVal = getPastThreshold(threshold);
threshold = 1;
alert(retVal);
function useFunction(someFunction) {
alert(someFunction);
return someFunction(40);
}
// Returns true if number is past 'threshold'.
function getPastThreshold(threshold) {
return useFunction( function (someNumber) { return someNumber >= threshold; });
}
您可以从警报中看到正在传递的函数 someFunction 包含变量阈值,但没有它的值。我们可以看到,threshold 的值不在 var Threshold 的范围内,它经过修改,这样,如果它在范围内,则下一个警报中的 bool 返回值将不是 false 而是 true;但是,从最初调用 getPastThreshold 函数时起,阈值是静态的。这是由于关闭所致。
关于javascript - 为什么这是一个闭包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24990442/