Как веригата в JavaScript - стек преливане на Руски

Както Алберт Айнщайн е казал:

Ако не можете да обясните нещо на шестгодишно, че е малко вероятно, че вие ​​сами разбират напълно.

Опитах се да обясня на моя приятел схема 27-годишна възраст, и той не го разбирам.

Как да се обясни по вина на всеки, който е запознат с всички принципи на програмиране е необходимо за разбирането на затваряне (функции, променливи, обхват и т.н.), но в действителност, затварянето?

Този въпрос е преведена от англоговорящите, така че.

Този код винаги дава 16, защото вътрешната функция вижда х. което е променливо в funkutsii външно. В този случай, аргументът на функцията. Просто вътре () може да прави разлика между ПТУ това от вън ().

Това е за затваряне или закриване. По-конкретно, на закриването се нарича външна функция, както и всичко в него, се нарича среда закриване или близо сряда.

Понякога се казва, че затварянето е функция, която връща функция, че е погрешно да се обадя закриването на функция е достатъчно да се вътрешни функции, обърнете се към променливата извън нейния обхват.

Горната функцията също ще издаде 16, тъй като дори и след като бар на Mt. продължава да има достъп до х и ПТУ. дори и самият той, а барът променливата не е в обхвата, в който са декларирани.

В този случай, тъй като променливата ПТУ е все още вътре лентата за закриване. тя продължава да расте с всеки бар повикване.

Ето един прост пример за схема:

Можете да създадете повече от една верига в една среда, да ги връща масив, обект, или свързано с глобални променливи. В този случай, те ще работят с една и съща стойност на х или ПТУ. без да се създава отделни екземпляра.

Тъй като в нашия пример, х е число, стойността се копира в Foo му аргумент х.

Както може би очаквате, всеки призив за бар (10) се увеличава x.memb. Това, което не може да се очаква, така че това е, че х продължава да се отнасят до един и същ обект като тази възраст. След две повиквания към бара. age.memb ще бъде 2! Между другото, и изтичане на памет се случват в HTML обекти.

Отговорено 9 '15 април в 08:45

"Способността да се помни контекста на функцията" - ако функцията се нарича document.body, можем да кажем, че функцията си спомни document.body? - Stack 23 януари '16 в 14:20

document.body - това не е променлива, и свойствата на обекти, към които ние се отнасят с помощта на глобална променлива документ. Това, което е написал, не се прилага за имоти, и се прилага само за самата променлива. Може би можем да кажем, че сме натрупали глобална променлива документ, но тъй като това е глобален, не е необходимо да го конфискува - така че е достъпен от всяка точка (с изключение на местата, където ще блокират видимостта на локалната променлива със същото име - и в този случай ние трябва да го, и няма да бъде в състояние да се превърне, като във веригата). Така че ние го zamknom или не - разликата не е на практика не, ние дори не се покажат. - Вячеслав Lapin 26 яну '16 в 16:33

Ако за кратко и в прав текст, че нещо подобно.

Отговорено 7 '15 април в 10:04

обясни с пример.

Отговорено 7 '15 април в 10:02