var foo = '1',
bar = '2';
console.log(foo, bar, window.foo); //1, 2, undefined
(function(foo){
console.log(foo, bar); //2, 2
})(bar);
У меня есть две тривиальные вопросы относительно приведенного выше кода:функции прицелы и глобальные переменные
Почему
window.foo
не определено? Не все глобальные переменные привязаны к объекту окна по умолчанию?Почему
foo ===
2 внутри крышки? Я знаю, что я передаю оригиналbar
с псевдонимомfoo
, который является2
, но за пределами области действияfoo
по-прежнему1
. И, насколько я знаю, исходныйfoo
может быть доступен изнутри крышки. Является ли «новый foo» приоритетным, поскольку он передан в качестве аргумента для IIFE?
Вопрос 1 - посмотрите, как запускается скрипка - 'onLoad'. Вопрос 2 - вы правы. Параметр 'foo'« перезаписывает »внешнюю область« foo », но ** только ** внутри IIFE. Я думаю, что это называется затенением. Таким образом, вы больше не сможете ссылаться на внешний 'foo', если вы не измените имя параметра ... или если' foo' фактически задано как свойство 'window' – Ian