Скрипт пропускается через точку с запятой неожиданно - PullRequest
1 голос
/ 02 сентября 2011

ПРИМЕЧАНИЕ: изначально я думал, что проблема была вызвана чем-то более сложным;Теперь я вижу (и отредактировал заголовок и пример кода), что единственным отличием является наличие или отсутствие точки с запятой.Это может затруднить ответ, но я все еще был удивлен, увидев конечную точку с запятой в этом случае, а не в других ...

Почему это работает:

<script type="text/javascript">
    this.someFunc = function () {};
    (function () {
        console.log("self-invoking function called.")
    })();
</script>

но это не так:

<script type="text/javascript">
    this.someFunc = function () {}

    (function () {
        console.log("self-invoking function called.")
    })();
</script>

и, тем не менее, это так:

<script type="text/javascript">
    this.someFunc = function () {}
    var someVar = "value";
    console.log("someVar is:"+someVar);
</script>

Последний интерпретирует самопризывающую функцию как undefined и поэтому не может оценить/ выполнить его.Протестировано на Chrome 13, Firefox 6 и Safari 5 на OSX.

Ответы [ 2 ]

2 голосов
/ 02 сентября 2011

Я полагаю, что второй фрагмент фактически выполняет объявление пустой функции. Если вы измените свой пример на это:

<script type="text/javascript">
    this.someFunc = function (arg) { console.log(arg); }

    (function () {
        console.log("self-invoking function called.")
    })();
</script>

и затем запустите (FF6), вы увидите, что он записывает: function(). Он передает вторую анонимную функцию в качестве аргумента для первой. Это имеет больше смысла, если вы переставите:

<script type="text/javascript">
    this.someFunc = function (arg) { console.log(arg); }(
        function () {
        console.log("self-invoking function called.")
    })

    (); //the parser doesn't know what to do with this line.
</script>
0 голосов
/ 02 сентября 2011

Просто глядя на первую связанную тему справа от вашего вопроса: Почему я должен использовать точку с запятой после каждой функции в javascript?

Принятый ответ - отличное объяснение этогоповедение.

...