Пробельная синтаксическая ошибка JavaScript

Подобный @Dana, но я думаю, что это походит на задание фильтрации, и это должно быть видимо в коде. Также без потребности явно звонить join():

def strip_string_to_lowercase(s):
  return filter(lambda x: x in string.ascii_lowercase, s.lower())
8
задан Jeff Meatball Yang 11 October 2009 в 13:10
поделиться

1 ответ

Дело не в пробелах, а в автоматической вставке точки с запятой с помощью JavaScript.

В спецификации ECMAScript говорится

Некоторые операторы ECMAScript (пусто оператор, оператор переменной, выражение выражение, do-while оператор, оператор продолжения, разрыв оператор, оператор возврата и бросок заявление) должен заканчиваться точка с запятой. Такие точки с запятой всегда могут явным образом присутствуют в исходном тексте. Однако для удобства такие точки с запятой могут быть опущены в исходный текст в определенных ситуациях. Эти ситуации описаны говоря, что точки с запятой автоматически вставляется в источник поток токенов кода в этих ситуациях.

Это означает, что ваш код

var FOO = (function($)
{
    return
    {      
        init: function()
        {

        }
    }
})(jQuery);

транслируется как

var FOO = (function($)
{
    return; // <- JavaScript will insert a semicolon here.

    {      
        init: function()
        {

        }
    }
})(jQuery);

, поэтому FOO будет неопределенным после выполнения функции.

Для другого вашего кода JS не будет вставлять точку с запятой, и он будет работать правильно. JS вставит точку с запятой после вашего литерального объекта, и все должно работать нормально. [РЕДАКТИРОВАТЬ: исправление, указанное kagnax]

Это означает, что вы всегда должны заканчивать свои операторы точкой с запятой. Разрешение механизму JS вставлять точку с запятой может привести к появлению очень тонких ошибок, на отладку которых уйдут часы. Вы можете использовать такой инструмент, как JSLint , который предупредит вас об отсутствии точек с запятой.

21
ответ дан 5 December 2019 в 07:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: