我从此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; }
);
}
wiki页面说明这是关闭的一个例子。
这个片段的封闭位置在哪里?
据我所知,闭包包含两个关键属性,一个返回的函数和一个创建该函数的环境。
此外,还有一些变量比创建它的函数的范围更长。
答案 0 :(得分:0)
我已经简化了代码,试图让概念更清晰。
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包含变量阈值但没有值。我们可以看到阈值的值没有从var阈值作为范围,var阈值被修改,以便,如果它在范围内,下一个警报中的布尔返回值将不是false而是true;但是,从最初调用函数getPastThreshold时,阈值的值是静态的。这是由于关闭。
答案 1 :(得分:0)
threshold
在函数bestSellingBooks
中定义为参数,并在函数function (book) { return book.sales >= threshold; }
中使用(该函数未重新定义)。根据定义,这是闭包。