Замыкания, осмысление!
Здравствуйте!Помогите разобраться правильно ли я понял замыкания!
Оцените кто-нибудь код: 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, время: 00:24. |