Ошибка вызова замыкания
Уже второй раз столкнулся с вот такой вот штукой, первый раз даже не понял в чем дело, если честно.
Но сейчас уже стало понятно. Вот код: var something = function() { alert("Something done?") } (function() { alert("or not?") })() Интересно, как быстро становится видна ошибка людям, которые знакомы с JavaScript лучше, чем я? |
тыщу раз сталкивался, когда обфусцировал код:
var something = function() { ... }; // Надо ставить ";" !!! |
ZoNT,
Ну я наверно минут 5-10 искал ошибку, а firebug мне писал что-то вроде: var some = function() { ... }(function() {...}) is not a function Я, скорее всего, буду ставить точку с запятой перед конструкцией вызова замыкания: ;(function(){ ... })() Мне не очень нравится идея ставить точку с запятой после фигурной скобки, и тем более ставить её только если после функции идет вызов локального замыкания - как то не комильфо. Лучше уж наверняка сразу перед конструкцией. В крайнем случае лишная точка с запятой никому не помешает. |
Я как то привык всегда и везде ставить точку с запятой, как в C++, помоему так удобнее. Первый раз столкнулся с этой проблемой, когда сжимал код через Packer от Dean Adwards, долго тогда искал, в чем же проблема, оказалось просто забыл поставить точку с запятой.
|
Андрей Параничев, согласно 7.9 Автоматическая вставка точек с запятыми точка запятой обязательна после некоторых инструкций ECMAScript, в число которых входит инструкция-выражение.
Цитата:
P.S.: а еще можно напороться в IE на ошибку, которую я тоже первый раз не сразу увидел - объявляя объект в IE, нельзя ставить лишнюю запятую после последнего свойства: var obj = { a: 1, b: 2, // из-за запятой - ошибка в IE }; |
Андрей Параничев, кстати, а в текущем случае - парсер пытается распознать вторую функцию как параметр первой (если убрать последние две сокобки вызова () - сразу будет видно), что еще раз подтверждает, что ставить точку с запятой - это хорошая (нужная) практика и правило хорошего тона в этом языке.
P.S.: к тому же сам B.Eich внедрил механизм автоматической вставки semicolon'a специально, чтобы JS был более лоялен к ошибающимся, новичкам и непрофессионалам (по его словам), поэтому, лучше сразу взять за правило - всегда ставить точку с запятой в нужных местах. |
Dmitry A. Soshnikov,
Ясно, спасибо, приму к сведению :) |
Цитата:
var obj = {}Фактически то же самое выражение, только правый операнд другой. |
Kolyaj,
В таком случае - ставил. Теперь буду ставить во всех случаях, где это требуется. |
Часовой пояс GMT +3, время: 06:33. |