Может ли кто-нибудь указать на простой пример, чтобы понять закрытие в деталях?Простой пример для закрытия
нижеследующая ссылка http://www.kirupa.com/html5/closures_in_javascript.htm неясно.
Спасибо.
Может ли кто-нибудь указать на простой пример, чтобы понять закрытие в деталях?Простой пример для закрытия
нижеследующая ссылка http://www.kirupa.com/html5/closures_in_javascript.htm неясно.
Спасибо.
Рассмотрим следующий
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
являются Referenceable на линии C, почему значения bar
и 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
является закрытие. Есть идентификаторы «завернутый» внутри него, которые продолжают жить дальше, пока foo
живет.
A Закрытие - это функция, которая использует ссылки из областей более высокого уровня.
Например:
// Sorrounding scope
var a = "hello world";
var func = function() {
// Function scope
var b = a + " !!!!";
};
См Closure (computer programming) on Wikipedia, чтобы узнать больше о том, что это замыкание в глубину.
Вот функция, которая определяет переменную 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
Как насчет [MDN - закрытие] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Closures). – fuyushimoya
Возможно, вы хотите объяснить, что именно не ясно. – Grmpfhmbl
http://stackoverflow.com/questions/111102/how-do-javascript-closures-work – epascarello