Параметр A не обозначает область действия функции. Положение функции определяет область действия функции. Параметр B не там, где вы экспортируете функцию. Фактически, как это настроено, нигде нет указателя на функцию, что делает ее «анонимной функцией». Другими словами, как есть, сама функция неэкспортируемая. Обычно, когда вы говорите об экспорте, вы говорите об экспорте переменных, которые вы определили в анонимных функциях. Например, здесь я экспортирую функцию my_inner_function
из анонимной функции.
(function (<ParameterA>) {
// export this function here.
window.my_inner_function = function() {
...
};
})(<ParameterB>);
Обычно смысл анонимных функций в том, что у вас есть все виды переменных, которые вы не хотите экспортировать, потому что вы не хотите гадить с другим кодом.
(function (<ParameterA>) {
// convert could be defined somewhere else too, so to be on the safe side
// I will hide it here in my anonymous function so nobody else can
// reference it.
var convert = function() {
...
};
})(<ParameterB>);
Это особенно важно, когда вы сжимаете свой Javascript и получаете имена функций, такие как a
и b
.
(function (<ParameterA>) {
// So compressed!
var a = function() {
...
};
})(<ParameterB>);
(function () {
// Another compressed thing! Good thing these are hidden within anonymous
// functions, otherwise they'd conflict!
var a = function() {
...
};
})();
Теперь это
(function (<ParameterA>) {
})(<ParameterB>);
это то же самое, что и
// Assume ParameterB is defined somewhere out there.
(function () {
var ParameterA = ParameterB;
})();
Что дает вам представление о том, почему вы используете параметры. Может показаться, что подход с использованием параметров менее запутан, или вы можете пояснить, что не хотите влиять на переменные «по значению», такие как числа и строки.
Как уже отмечали другие, a || b
произносится как «a или b» и означает «a
, если a
оценивается как истинное, в противном случае b
, независимо от того, что b
».
Редактировать
Чтобы ответить на ваш вопрос, когда вы попадаете на })();
, ()
запускает анонимную функцию. Помните, что движки Javascript сначала проанализируют весь код, чтобы убедиться в правильности синтаксиса, но на самом деле не будут оценивать / выполнять какой-либо код, пока не достигнут этого кода. Следовательно, когда анонимная функция запускается, var ParameterA = ParameterB;
оценивается. Вот несколько примеров, которые, надеюсь, помогут.
var ParameterB = "hello";
(function () {
var ParameterA = ParameterB;
// alerts "hello" because when this line is evaluated ParameterB is still
// "hello"
alert(ParameterA);
})(); // () here causes our anonymous function to execute
ParameterB = "world";
Теперь в этом примере функция больше не является анонимной, потому что она имеет
указатель Однако он действует так же, как и в предыдущем примере.
var ParameterB = "hello";
var myFunction = function () {
var ParameterA = ParameterB;
// alerts "hello" because when this line is evaluated ParameterB is still
// "hello"
alert(ParameterA);
};
myFunction();
ParameterB = "world";
В этом примере я меняю порядок последних двух строк и получаю разные
Результаты.
var ParameterB = "hello";
var myFunction = function () {
var ParameterA = ParameterB;
// alerts "world" because when this line is evaluated ParameterB has
// already changed.
alert(ParameterA);
};
// notice that I moved this line to occur earlier.
ParameterB = "world";
myFunction();