2013-03-07 3 views
0

При использовании Javascript Closures существует ли разница в использовании объектов Object literal Vs Constructor?Закрытие Javascript (Object literal Vs Constructor based)

Есть ли разница в синтаксисе ИЛИ есть какая-то другая разница, а также для закрытий? Любой пример, объясняющий 2 отличия, был бы действительно полезен.

ответ

0

Закрытие больше касается области действия переменной. Поэтому важно знать, что область действия переменной - это функция, в которой она была определена. Любая функция, выполняемая внутри этой области, будет иметь доступ к ее функции как таковой. Родительская функция не будет иметь доступ к переменной , потому что она находится за пределами области этого ребенка.

Следовательно, переменная в объектном литерале будет привязана к функции, в которой она содержится. (Если это не функция, то она находится в области ). Конструктор - это функция, поэтому любые переменные, которые она определяет, ограничены сами по себе и недоступны снаружи. Любые внутренние методы, которые есть в конструкторе, имеют доступ к тем определенным переменным.

Закрытие создается, когда функция имеет доступ к переменной, которая находится за пределами ее собственной области действия, и эта переменная может быть изменена или изменена чем-то еще ... даже после завершения функции.

Я надеюсь, что это помогло некоторым.

1

Закрытие - это функция функционального программирования. Они не имеют ничего общего с объектами или предметными литералами.

Прочитайте следующий ответ - это объясняет закрытие действительно хорошо: https://stackoverflow.com/a/12931785/783743

В целом замыкание является функцией, которая закрывает более переменные в вложенной функции, которая выходит за рамки закрытия. Например:

function getCounter() { 
    var count = 0; 

    return function counter() { 
     return ++count; 
    }; 
} 

var counter = getCounter(); 

counter(); // 1 
counter(); // 2 
counter(); // 3 

Здесь функция getCounter становится замыкание, потому что он закрывает над переменной count, используемой в вложенной функции counter, когда вложенная функция возвращается (выходит за рамки getCounter).

Переменная, которая закрыта (в данном случае count), называется upvalue. Замыкания важны, потому что они позволяют использовать ценности, которые в противном случае выходили бы за рамки (собирать мусор), чтобы оставаться в живых. Это невозможно в таких языках, как C/C++ и Java.

Смежные вопросы