2016-04-08 3 views
0

Я немного запутался в потоке выполнения функций self invoking в javascript.Функция самозапуска

<!DOCTYPE html> 
<html> 
<head> 
</head> 
<body> 
<script> 

    var test = function() { 
     alert("Test1##"); 
    } 

    var test2 = function() { 
     alert("Test2!!"); 
    } 

    (function() { 
     test(); 
    })(); 

</script> 

</body> 
</html> 

Результат: Test2!!. Я ожидал, что он предупредит Test1##, так как я вызываю эту конкретную функцию.

Однако, если я включаю точки с запятой после каждой функции test и test2, результат будет таким, каким я ожидаю: он будет предупреждать Test1##.

Как это работает?

+0

JavaScript не пробела языка. Поместите точки с запятой в. – isherwood

+1

"* Однако, если я включаю точку с запятой после каждой функции ... результат будет таким, как я ожидаю, что это будет *" - и именно поэтому использование полуколонок - хорошая идея. –

+0

Вы должны указать точку с запятой после объявления переменной в javaScript, иначе она может печатать неожиданные результаты. var test = function() { alert ("Test1 ##"); }; var test2 = function() { alert ("Test2 !!"); }; (функция() { test(); })(); – abhiagNitk

ответ

4

Вам нужно использовать некоторые точки с запятой. В противном случае утверждения смешиваются.

Почему я думаю, что это происходит из-за того, что функция, вызывающая test, вообще не вызвана, но она передается в test2 в качестве первого аргумента.

Вы можете видеть, что поведение здесь: https://jsfiddle.net/ssgagr3k/

+0

Он работает правильно с точкой с запятой, я хочу понять, как js относится к нему, когда нет точки с запятой. Если выполнение начинается с первой заданной функции, почему она не печатает операторы в первой функции и последующих, пока она не встретит точку с запятой? – theblackpearl

+0

Daniel, Вы правы. Это можно протестировать, вызвав 'console.log (arguments)' из функции test2. Изменить: *. (ваш тест работает тоже, я полагаю: P) –

+0

Отличный пример Даниэля. Теперь у меня больше вопросов. Даже если вы удаляете функцию 'test()' call in self invoking, результат остается тем же. Функция вызова внутри функции self invokes, похоже, не имеет значения. Также, как 'val' передается' test2() '? Цените свой ответ. – theblackpearl

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