答案 0 :(得分:0)
闭包是一个使用更高级别范围的引用的函数。
例如:
// Sorrounding scope
var a = "hello world";
var func = function() {
// Function scope
var b = a + " !!!!";
};
请参阅Closure (computer programming) on Wikipedia以了解有关深度闭合的更多信息。
答案 1 :(得分:0)
考虑以下
var noun = 'Governor';
var foo = (function () {
var bar = 'Hello';
// A
return function () {
var baz = 'Blake';
console.log(bar, noun, baz);
// B
};
}());
// C
foo();
noun
,foo
,bar
noun
,foo
,bar
,baz
noun
,foo
现在继续思考,如果只有noun
,foo
可以在第C行引用,为什么值bar
和{{1} } baz
时出现?更具体地说,为什么foo()
仍在那里?它甚至没有在我们被指定为bar
的函数中定义。
foo
这是因为// remember, `foo` looks like this (log it to check for yourself)
function () {
var baz = 'Blake';
console.log(bar, noun, baz); // `bar` used but _not defined here_
// B
}
是闭包。其中包含标识符"" ,只要foo
存在就会继续存在。
答案 2 :(得分:0)
这是一个定义变量number
的函数,然后定义一个引用该变量的函数。即使外部函数已关闭,内部函数也会保留对number
的引用。变量基本上位于口袋宇宙中,现在只有内部函数可以看到它。
(function(){
var number = 0;
window.count = function(){
number = number + 1;
console.log(number);
};
})()
count();
// 1
count();
// 2
console.log(number);
// number is not defined