27.09.2008, 21:28
|
|
|
Регистрация: 21.02.2008
Сообщений: 1,250
|
|
Ошибка вызова замыкания
Уже второй раз столкнулся с вот такой вот штукой, первый раз даже не понял в чем дело, если честно.
Но сейчас уже стало понятно. Вот код:
var something = function() {
alert("Something done?")
}
(function() {
alert("or not?")
})()
Интересно, как быстро становится видна ошибка людям, которые знакомы с JavaScript лучше, чем я?
|
|
27.09.2008, 23:44
|
Флудер
|
|
Регистрация: 25.07.2008
Сообщений: 1,271
|
|
тыщу раз сталкивался, когда обфусцировал код:
var something = function() {
...
}; // Надо ставить ";" !!!
|
|
28.09.2008, 00:16
|
|
|
Регистрация: 21.02.2008
Сообщений: 1,250
|
|
ZoNT,
Ну я наверно минут 5-10 искал ошибку, а firebug мне писал что-то вроде:
var some = function() { ... }(function() {...}) is not a function
Я, скорее всего, буду ставить точку с запятой перед конструкцией вызова замыкания:
;(function(){ ... })()
Мне не очень нравится идея ставить точку с запятой после фигурной скобки, и тем более ставить её только если после функции идет вызов локального замыкания - как то не комильфо. Лучше уж наверняка сразу перед конструкцией. В крайнем случае лишная точка с запятой никому не помешает.
|
|
28.09.2008, 00:33
|
|
|
Регистрация: 10.07.2008
Сообщений: 3,873
|
|
Я как то привык всегда и везде ставить точку с запятой, как в C++, помоему так удобнее. Первый раз столкнулся с этой проблемой, когда сжимал код через Packer от Dean Adwards, долго тогда искал, в чем же проблема, оказалось просто забыл поставить точку с запятой.
|
|
28.09.2008, 01:30
|
Профессор
|
|
Регистрация: 25.02.2008
Сообщений: 707
|
|
Андрей Параничев, согласно 7.9 Автоматическая вставка точек с запятыми точка запятой обязательна после некоторых инструкций ECMAScript, в число которых входит инструкция-выражение.
Сообщение от Андрей Параничев
|
Я, скорее всего, буду ставить точку с запятой перед конструкцией вызова замыкания
|
не обязательно замыкания; а вообще, да - эта хорошая практика, поскольку не известно, поставил ли автор сторонней библиотеки точку с запятой в конце или нет, а ставя ее перед началом нашего кода, - мы подстраховываемся.
P.S.: а еще можно напороться в IE на ошибку, которую я тоже первый раз не сразу увидел - объявляя объект в IE, нельзя ставить лишнюю запятую после последнего свойства:
var obj = {
a: 1,
b: 2, // из-за запятой - ошибка в IE
};
|
|
28.09.2008, 12:30
|
Профессор
|
|
Регистрация: 25.02.2008
Сообщений: 707
|
|
Андрей Параничев, кстати, а в текущем случае - парсер пытается распознать вторую функцию как параметр первой (если убрать последние две сокобки вызова () - сразу будет видно), что еще раз подтверждает, что ставить точку с запятой - это хорошая (нужная) практика и правило хорошего тона в этом языке.
P.S.: к тому же сам B.Eich внедрил механизм автоматической вставки semicolon'a специально, чтобы JS был более лоялен к ошибающимся, новичкам и непрофессионалам (по его словам), поэтому, лучше сразу взять за правило - всегда ставить точку с запятой в нужных местах.
|
|
28.09.2008, 14:10
|
|
|
Регистрация: 21.02.2008
Сообщений: 1,250
|
|
Dmitry A. Soshnikov,
Ясно, спасибо, приму к сведению
|
|
01.10.2008, 10:56
|
Новичок на форуме
|
|
Регистрация: 19.02.2008
Сообщений: 9,177
|
|
Сообщение от Андрей Параничев
|
Мне не очень нравится идея ставить точку с запятой после фигурной скобки
|
Странная позиция, а тут тоже не поставите?
var obj = {}
Фактически то же самое выражение, только правый операнд другой.
|
|
01.10.2008, 21:16
|
|
|
Регистрация: 21.02.2008
Сообщений: 1,250
|
|
Kolyaj,
В таком случае - ставил. Теперь буду ставить во всех случаях, где это требуется.
|
|
|
|