2013-11-12 5 views
3

В чем разница между двумя следующими способами объявления переменных javascript?Объявление переменных javascript

Version 1

var shadowBox = $(this); 
var startInfo = shadowBox.children('.start-info'); 
var originalHeight = startInfo.height(); 

Version 2

var shadowBox = $(this), 
    startInfo = shadowBox.children('.start-info'), 
    originalHeight = startInfo.height(); 

Я только спрашиваю, потому что я использовал второй вариант в JQuery плагин:

(function ($) { 
    $.fn.setUpShadowBox = function (options) { 
     options = $.extend({ 
      boxSpeed: 750, 
      boxWidth: 998, 
      boxPosition: -40, 
      heightSpeed: 500, 
      scrollSpeed: 750 
     }, options); 

     return $(this).each(function() { 
      var shadowBox = $(this), 
       startInfo = shadowBox.children('.start-info'), 
       originalHeight = startInfo.height(); 

      //rest of plugin code 
     }); 
    }; 
}); 

но когда Я использовал он на селекторе классов, поэтому ему пришлось перебирать несколько раз, обрабатывать переменные, как если бы они были глобальными, и использовать только последний установленный originalHeight. Как только я изменил это на первую версию объявления переменных, мой плагин работал так, как ожидалось, и переменные оставались в пределах их объема.

Почему это?

+0

Вы потеряли запятую в конце: 'var shadowBox = $ (this)' – NAZIK

+0

На самом деле, на это был дан ответ в прошлом году, и если вы посмотрите на комментарии ниже принятого ответа, я не изменил полуколону в запятую. Не знаете, откуда вы получили ответ, поскольку код, который я показал в вопросе, имеет запятую - если только вы не скопировали принятый ответ – Pete

ответ

3

Вы пропустили запятую на первой строке?

Если вы сделаете это:

var shadowBox = $(this) 
    startInfo = innerContainer.children('.start-info'); 

Вместо этого:

var shadowBox = $(this), 
    startInfo = innerContainer.children('.start-info'); 

startInfo станет глобальной переменной.

Попробуйте разместить их на одной линии и посмотреть, что произойдет.

+0

За любопытством, почему недостающая кома делает make start start? –

+0

Из-за автоматической вставки точки с запятой, см. Это: http://stackoverflow.com/questions/2846283/what-are-the-rules-for-javascripts-automatic-semicolon-insertion-asi – pax162

+0

ах, аналогичная ошибка - я забыл измените запятую в запятую, когда я добавил новую переменную! будет принимать, когда я смогу – Pete

0

Пожалуйста, взгляните на Declaring javascript variables, это будет действительно полезно. Ваша проблема: var shadowBox = $(this), вам не хватает запятой.

Смежные вопросы