2010-04-29 10 views
4

Я начинаю изучать javascript для проекта, я нашел скрипт, который выполняет часть того, что мне нужно сделать, я хотел бы знать, как это работает, как для меня, так и в случае его изменения ,Что это за линии?

Первоначально он был использован внутри страницы, теперь я поместил его в файл самостоятельно и больше не работает, поэтому я разделяю его по частям, потому что я не могу получить все это.
Вот что меня больше всего беспокоит:

1) Это объявление функции? Как это называется? Как его можно вызвать?

(function() { 
    //some code 
})(); 

2) Нет подсказкой о том, что происходит здесь

var VARIABLE = VARIABLE || {}; 

3) Могу ли я определяющим реализацию methodCall здесь? Что-то вроде переопределения метода в Java?

VARIABLE.methodCall = function(parameter) { 
    console.log("parameter was: " + parameter); 
}; 

Заранее благодарю вас за помощь.

+0

Чтобы понять концепции, лежащие в приведенных выше утверждениях, я настоятельно рекомендую прочитать Дуглас Crockfords 'Javascript - хорошие части.Кроме того, вы можете просто посмотреть его видео на YouTube - http://www.youtube.com/watch?v=hQVTIJBZook –

+0

@sri: спасибо, я проверю его. –

ответ

10

1) создает неназванную функцию и выполняет ее. это полезно для создания области для локальных переменных, невидимых вне функции. Вам не нужно ссылаться на это в стороне от этого, «()» в конце делает это для вас.

2) Если переменная null/undefined, установите ее в пустой объект.

3) да, это должно работать, как вы ожидаете, вы можете вызвать VARIABLE.methodCall (параметр)

в ответ на ваш комментарий, здесь является типичным примером

function foo (VARIABLE) { 
    var VARIABLE = VARIABLE || {}; 
} 
+0

Спасибо за ваш ответ, как может 'VARIABLE' быть null/undefined, если он определен в этой строке? –

+0

Хорошо, я вижу, теперь ясно. Благодарю. –

+1

Просто обратите внимание, что во втором примере 'VARIABLE' будет * всегда * инициализирован на' {} ', независимо от значения внешнего' VARIABLE', потому что внешний будет * shadowed * в области, созданной функцией , – CMS

3
(function() { 
    //some code 
})(); 

просто работает //some code, но переменные в нем не останутся, так как блок function() { } представляет новую внутреннюю область.

function() { } обозначение называется замыканием, оно позволяет переменным быть функциями. Например,

(function() { })() является общей идиомой JavaScript. После ) существует (), который вызывает выражение before как функцию, допускается so (callback || function(x) { return x; })(x).

var a = function a() { return 1; }

var VARIABLE = VARIABLE || {}; использует короткое замыкание или, если VARIABLE не определен, VARIABLE будет установлен в {}, пустой объект. (в противном случае, если VARIABLE существует, он не изменится)

x = A || B означает «Если A оценивает значение TRUE, x равно A, в противном случае x равно B.».

VARIABLE.methodCall, как вы сказали, добавляет methodCall к VARIABLE, без стирания других значений в VARIABLE

+0

Я не думаю, что «закрытие» - это правильный термин для обозначения любого выражения функции, замыкание формируется только тогда, когда функция, объявленная внутри другой, становится доступной * вне * этой функции, связывая ее * охватывающую область * ... – CMS