Что делает этот дополнительный набор круглых скобок? [Дубликат]

  1. Это может произойти, если ваш путь к классам неверен
  2. . Положим сериализуемый класс и десериализуемый класс под тем же именем проекта. Вы запускаете сериализуемый класс, создавая сериализуемый объект в определенной папке. Теперь вам нужны десериализованные данные. Тем временем, если вы измените название проекта, это не сработает. Сначала необходимо запустить сериализуемый класс, а затем десериализовать файл.
0
задан willy teng 22 July 2015 в 04:15
поделиться

3 ответа

То есть, действительно, IIFE. Синтаксис, который вы цитируете, - это IIFE из 0 аргументов; Синтаксис, о котором вы просили, - это IIFE из 1 аргумента. Он назначит i x во внутреннем коде. Сравнение:

var print0 = function() {
  console.log("Hello!");
};
print0();

(по отдельности) эквивалентно

(function() {
  console.log("Hello!");
})();

Таким образом, имя: вы создаете функцию, а затем сразу вызываете ее.

Однако, если вам нужен аргумент, ничего не меняется:

var print1 = function(name) {
  console.log("Hello, " + name);
};
print1("George");

(изолированно) эквивалентно

(function(name) {
  console.log("Hello, " + name);
})("George");

В скобках здесь указано, что определение функции будет выполнено как выражение, а не как утверждение. Существуют и другие способы гарантировать, что общий

!function() {
  console.log("Hello!");
}();

(Но есть причины предпочесть круглые скобки.) Поскольку вы используете его в качестве аргумента для вызова setTimeout, он может Возможно, это заявление, поэтому эти хаки не нужны. Он по-прежнему называется «немедленно вызванным выражением функции», поскольку вы все еще строите выражение функции и сразу вызываете его.

Причина, по которой здесь используется IIFE, заключается в «захвате» значения переменной i, а не местоположение x. Без трюка замыкания вы получите 10 тайм-аутов, все выдает 10 (значение местоположения, обозначенное x при разрешении console.log).

2
ответ дан Amadan 22 August 2018 в 06:26
поделиться
  • 1
    Я вижу! спасибо за быстрый ответ, человек оценит это – willy teng 22 July 2015 в 04:31

Да, это так, а (i) - список аргументов для вызова. Посмотрите здесь для подробного объяснения. В этом случае скобки группировки являются излишними, так как это аргумент для вызова функции setTimeout и, следовательно, выражения в любом случае.

Термин IIFE относится не только к форме заявления этого шаблона, где скобки были бы необходимы .

0
ответ дан Community 22 August 2018 в 06:26
поделиться

Скобки в необязательном порядке в вашем примере сразу вызываемой функции.

(function() {
  // some code
})();

Может быть переписана как

function() {
  // some code
}();

Итак, i в примере вызов функции становится x в определении функции.

function(x) { // x = 1
    return function() { 
        console.log(x); // x = 1
    }; 
}(1)
0
ответ дан nivix zixer 22 August 2018 в 06:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: