Является ли следующая конструкция JavaScript называется закрытием? [Дубликат

StackOverflow https://stackoverflow.com/questions/3872604

  •  28-09-2019
  •  | 
  •  

Вопрос

Этот вопрос уже имеет ответ здесь:

(function() {

  //do stuff

})();

Редактировать: Я изначально думал, что эта конструкция называлась закрытием - не то, что эффект, который он вызывал результаты (потенциально) в закрытии - если переменные захватываются.

Это никоим образом не связано с поведением закрытия самих - это я понимаю полностью и не было то, что просили.

Это было полезно?

Решение

Это анонимная функция (или точнее Навесенная анонимная функция) который выполняется немедленно.

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

Другие советы

Это анонимная функция, но это не закрытие, так как у вас нет ссылок на внешний объем

http://www.jibbering.com/faq/notes/Closures/

Я обычно называю это чем-то вроде «немедленного вызова анонимной функции».

Или, проще, просто «функция самоузывания».

Что-то вроде. Это на самом деле не совсем не закрывается, и он немедленно вызывается, так что это действительно просто анонимная функция.

Возьми этот код:

function foo() {
    var a = 42;
    return function () {
        return a;
    }
}

var bar = foo();
var zab = bar();
alert(zab);

Здесь функция, возвращаемая FOO (), является закрытием. Он закрывается вокруг переменной. Несмотря на то, что ave apear давно исчезло из прицела, вызывая закрытие, позвонив, это все еще возвращает ценность.

Нет, закрытие скорее что-то вдоль этих линий:

function outer()
{
    var variables_local_to_outer;

    function inner()
    {
        // do stuff using variables_local_to_outer
    }

    return inner;
}

var closure = outer();

Закрытие сохраняет ссылку на локальные переменные к функции, которая его вернула.

Редактировать: Вы, конечно, можете создать закрытие с использованием анонимных функций:

var closure = (function(){

    var data_private_to_the_closure;

    return function() {
        // do stuff with data_private_to_the_closure
    }

})();
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top