Что такое модель домена Java?

То есть, действительно, 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).

30
задан informatik01 5 July 2019 в 08:53
поделиться