Как вы объясните эту структуру в JavaScript?

(function() 
 {
     //codehere
 }
)();

Что особенного в этом синтаксисе? Что значит()(); значит?

Ответы

Ответ 1

Создает анонимную функцию, закрытие и все, а final() сообщает ей выполнить сам.

Это в основном то же самое, что:

function name (){...}
name();

Таким образом, в принципе нет ничего особенного в этом коде, это просто "ярлык" для создания метода и вызова его без необходимости его называть.

Это также означает, что функция является одной или внутренней функцией для объекта и наиболее полезна, когда вам нужны функции закрытия.

Ответ 2

Это анонимная функция, вызываемая.

Целью этого является создание новой области, из которой локальные переменные не истекают. Например:

var test = 1;
(function() {
  var test = 2;
})();
test == 1 // true

Одно важное замечание об этом синтаксисе заключается в том, что вы должны привыкнуть к завершению операторов с помощью двоеточия, если вы этого еще не сделали. Это связано с тем, что Javascript позволяет передавать строки между именем функции и ее скобками, когда вы вызываете ее.

Ниже приведен фрагмент ниже:

var aVariable = 1
var myVariable = aVariable

(function() {/*...*/})()

Вот что он на самом деле делает:

var aVariable = 1;
var myVariable = aVariable(function() {/*...*/})
myVariable();

Другим способом создания новой области блока является использование следующего синтаксиса:

new function() {/*...*/}

Разница в том, что прежний метод не влияет на то, где указывает ключевое слово "this", тогда как второе делает.

Javascript 1.8 также имеет оператор let, который выполняет одно и то же, но, разумеется, он не поддерживается большинством браузеров.

Ответ 3

Это самозапускающаяся анонимная функция. Функция() в конце фактически вызывает функцию.

Хорошая книга (я прочитал), которая объясняет некоторые применения этих типов синтаксиса в Javascript объектно-ориентированный Javascript.

Ответ 4

Это использование в основном эквивалентно внутреннему блоку в C. Оно предотвращает видимость внешних переменных внутри блока. Таким образом, это удобный способ создания одного класса с частными объектами. Просто не забудьте return this;, если вы используете его для создания объекта.

var Myobject=(function(){
    var privatevalue=0;
    function privatefunction()
    {
    }
    this.publicvalue=1;
    this.publicfunction=function()
    {
        privatevalue=1; //no worries about the execution context
    }
return this;})(); //I tend to forget returning the instance
                  //if I don't write like this

Ответ 6

Материал в первом наборе скобок вычисляет функцию. Второй набор скобок выполняет эту функцию. Поэтому, если у вас есть что-то, что нужно запускать автоматически, то это может привести к его загрузке и выполнению.