Я просматривал JavaScript allonge#six и пришел к этому примеру (короткие комментарии после каждой строки кода ):
((PI) => { //1 - Outer - PI = 3.14
((PI) => {})(100); // 2 - IIFE (LOCAL) PI = 100
// ((PI) => PI)(100) // alternative1 = LOCAL PI = 100
// ((PI) => {return PI;})(100) // alternative2 - LOCAL PI = 100
return (diameter) => diameter * PI; // 3 - PI = 3.14
})(3.14)(2)
Во всех этих случаях аргумент, ограниченный для PI во внешней функции, передается непосредственно оператору return, игнорируя, таким образом, IIFE. Единственный способ скрыть аргумент «PI» — изменить оператор return на это:
((PI) => (diameter) => diameter * PI)(100)
Итак, первый вопрос. Есть ли другой способ скрыть аргумент PI (тот, который привязан к внешней функции), кроме замыкания в этом случае?
Кроме того, я запускал код через консоль разработчика Google построчно и дошел до точки кода, где значение PI внутри IIFE «перезаписывается» до 3,14, несмотря на то, что ранее оно было ограничено до 100.
Второй вопрос:
Что происходит с IIFE внутри после его выполнения, в какой момент его значение PI перезаписывается до 3,14?
let
, который позволяет вам объявлять переменную только для текущей области, поэтому вы можете иметь, скажем, переменную с именемx
вне цикла for и другую переменную с именемx
внутри цикла for без перекрытия двух. - person VLAZ   schedule 07.08.2016