Чтобы запустить любой код внутри него, необходимо позвонить Init
. Теперь этот код внутри - это обычный код JavaScript, но интересный. Давайте посмотрим, почему.
Как
Ваша внутренняя функция является так называемая IIFE. Что вы можете сделать, чтобы упростить чтение внешней функции (Init
), является замена внутренней функции результатом вызова IIFE.
Вот несколько примеров:
var x = undefined; // x === undefined
x = (undefined); // again
x = 3; // x === 3
x = (3); // again the same
x = 'some string'; // some string
x = ('some string'); // the same
Так это нормально, чтобы положить ()
вокруг объекта, вы получите тот же объект. То же самое для функции
x = function() {}; // x is that function now.
x = (function() {}); // the same.
Но если вы говорите x = 3;
, вы можете позвонить х?
x = 3;
x(); // syntax error
x = (3);
x(); // again error. can't call a number.
Но, если х является функцией, вы можете назвать это:
x = function() { console.log('Hi'); }; // you can call x now.
x(); // logs 'Hi'!
Так что, если вы делаете то же самое с скобкой, это то же самое:
x = (function() { console.log('Hi'); }); // again, the same.
x(); // no error, function called again!
Так вы может пропустить часть задания:
// instead of x = (...); and the x(), you replace the x part right away.
(function() { console.log('Hi'); })()
// function body up to here ^^ now the call part.
Обратите внимание, что он не будет работать без первой пары скобок:
function() { console.log('Hi'); }(); // syntax error.
Так вы кладете внешние скобки ()
только актерский выражение функции в объект на месте.
Почему
Так вот, как это работает. Но почему? Потому что вы хотите удостовериться, что никто не называет вашу функцию! Если вы сделаете это:
var x = function() {};
x();
В настоящее время существуют по крайней мере две вещи, которые могут случиться, что вы не можете:
Там может быть имя столкновение. Возможно, вы не знаете, существует ли уже «х», где бы внешняя функция вызывалась, например, вы bind
Инициируйте какой-либо объект, который имеет x в области или что-то в этом роде.
Кто-то может «украсть» ваш х и называть его снова. Не обязательно воровать, вы просто просачиваетесь (тонкая ошибка) и некоторые другие кодовые вызовы x, ожидая найти свой собственный x, но на самом деле это ваш x сейчас, потому что он доступен. И ты хотел, чтобы этого не было.
Таким образом, вы легко блокируете его в анонимной функции, которая была выполнена сразу.
Надеюсь, это немного облегчит ситуацию.
Да, потому что его IIFE определяет область вокруг вашего кода. В вашем случае это не имеет значения, потому что Init уже создал область. – Blauharley