2016-05-21 1 views
1

Я понимаю, что есть самораспаковывающиеся анонимные функции, такие как:Что означает закрытие javascript на анонимной функции и когда использовать закрытые анонимные функции?

var func = function(){ 
    return 'hello'; 
}(); 

И я видел другую версию этого с затворами.

var func = (function(){ 
    return 'hello'; 
}()); 

насколько я протестировал оба синтаксиса, обеспечивает такой же результат и имеет схожее поведение. Какова цель закрытия? заранее спасибо.

+1

вы неправильно поняли закрытие, пожалуйста, прочитайте его [здесь] (https://developer.mozilla.org/en/docs/Web/JavaScript/Closures). И «автономные исполняемые анонимные функции» имеют имя IIFE, здесь] (http://benalman.com/news/2010/11/immediately-invoked-function-expression/) – Dhaval

ответ

2

Давайте рассмотрим пример и немного изменим.

var func = (function(){ 
    //here are some local variables 
    var demo = 'hello' 
    return function(){ 
    return demo; 
    } 
}()); 

func() // outputs "hello" 

здесь функция выполняется, и он создает свою локальную переменную «демо» со значением «привет» и возвращает function.In Java скрипт после выполнения функции его все локальные переменные разрушенную или мусора . Но в этом специальном случае возвращенная анонимная функция по-прежнему имеет доступ к этой переменной 'demo'. Этот специальный доступ называется закрытием.

+1

Я не думаю, что OP действительно спрашивает о закрытии. Он мог бы подумать о дополнительной круглой скобке во втором примере. – Lewis

+0

@Tresdin .. Именно. –