2012-02-16 2 views
4

разница между этими двумя функциями:Разница между этими яваскрипта функциями

(function($){ 
    console.log($); 
}("test")); 

(function($){ 
    console.log($); 
})("test"); 

Я попробовал его на веб-консоли и нажать «Выполнить». Они возвращают то же самое. В чем же разница с изменением местоположения скобок?

Я предполагаю, что второй запускается немедленно, верно?

+1

Как вы пришли к мысли, что есть разница? –

+1

См. Также: http://stackoverflow.com/questions/3384504/location-of-parenthesis-for-auto-executing-anonymous-javascript-functions, http://stackoverflow.com/questions/3783007/is-there- a-difference-between-function-and-function и т. д. – nnnnnn

ответ

2

Два фрагмента идентичны; ни одна функция не возвращает значение, и оба записывают свой аргумент в консоль. Аналогично, обе анонимные функции вызывают с аргументом "test".

Единственное различие заключается в синтаксисе относительно группировки определения функции и ее применения к ее аргументам. Первая функция группирует определение функции вместе с оператором (), тогда как вторая функция группирует определение функции отдельно от приложения.

В конечном счете нет смысловой разницы. Оба фрагмента содержат анонимную функцию, которая регистрирует свой аргумент и затем вызывается с аргументом «test».

+0

Почему downvote? – maerics

1

Существует абсолютно без разницы.

В первом случае вы даете «тестовое» значение своей функции без областей и нет никакой разницы. В обоих направлениях он будет работать одинаково.

2

Единственное различие, о котором я могу думать, это если вы назначили переменную функции внутри первого набора круглых скобок, вы получите разные результаты в зависимости от группировки.

var test; 

(test = function(arg) { 
    console.log(arg) 
})('I am the argument!') 

Это работает, как ожидалось: Назначает «тест» функции, затем запускает его один раз с аргументом во втором наборе скобок. Это то же самое, что и установка теста, а затем запуск с test('I am the argument!')

Но как насчет другого пути?

var test; 

(test = function(arg) { 
    console.log(arg) 
}('I am the argument!')) 

test не определено! Зачем? Поскольку, когда вы помещаете круглые скобки рядом с функцией, она вызывает функцию до, затем присваивает ее переменной. Если вы завершите присвоение в круглых скобках , тогда запустите его (пример 1), тогда вы хорошо пойдете.

Смежные вопросы