Замыкания, осмысление!
Здравствуйте!Помогите разобраться правильно ли я понял замыкания!
Оцените кто-нибудь код:
function makePhrase(phrase) {
return function(name) {
return phrase + ', ' + name;
}
}
var phraseHi = makePhrase('Привет');
var phraseBye = makePhrase('Пока');
alert(phraseHi('Джек'));
alert(phraseBye('Джек'));
Мое понимание: Функции phraseHi и phraseBye - это примеры замыканий!Эти функции делят одно определение тела функции, но сохраняют различные окружения.В окружении функции phraseHi аргумент phrase имеет значение 'Привет', а в окружении phraseBye phrase - это 'Пока'. Заранее спасибо всем за комментарии! |
Я нашел эти описания полезными, если понимать о чем там:
https://developer.mozilla.org/en-US/...ence/Functions https://developer.mozilla.org/en-US/...uide/Functions http://exploringjs.com/es6/ch_core-features.html http://exploringjs.com/es6/ch_variables.html |
Цитата:
|
Если смотреть по складам, то, например,
var phraseHi = makePhrase('Привет');
соответствует
var phraseHi = function(name) {
return 'Привет, ' + name;
}
т.е. в этом случае создается отдельная функция, содержащая в себе Привет. И вряд ли при последующем
var phraseBye = makePhrase('Пока');
новая функция будет как-то совмещаться с предыдущей |
А мне думается, что функция одна, только окружения разные!Можете привести наглядный пример!?
|
Цитата:
function makePhrase(phrase) {
return function(name) {
return phrase + ', ' + name;
}
}
var phraseHi = makePhrase;
var phraseBye = makePhrase;
alert(phraseHi===phraseBye);
phraseHi = makePhrase('Привет');
phraseBye = makePhrase('Пока');
alert(phraseHi===phraseBye);
А оно не выполняется в твоем случае... Цитата:
В твоем примере возвращается функция. Даже если текст у нее будет одинаковый - это таки разные объекты (читай функции). Про что тебе писали выше.
function test() {
return function() {
alert('Ok');
}
}
var fnc0 = test();
var fnc1 = test();
alert(fnc0===fnc1);
Т.ч. ты просто думаешь не верно. |
Цитата:
Цитата:
У тебя нет никакого равенства функций. Т.е. они равны только в твоем понимании и не более того. Но ты же не JavaScript... ;) У языка свои правила. |
Цитата:
|
| Часовой пояс GMT +3, время: 12:43. |