2013-07-02 3 views
0

У меня есть некоторые вопросы о jquery plugin - bootstrap-popover.js.

  1. ! Function ($) {// Значение?
  2. Некоторые линии не имеют точки с запятой и запятой, почему?
  3. } (window.jQuery); // имея в виду?

!function ($) { //<--- 1. what does this line mean? 

     "use strict"; // jshint ;_; 

     var Popover = function (element, options) { 

     this.init('popover', element, options) //<-- 2. this line has no semicolon, why...? 

     } 

     Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype, { 
     .................................. 
     }) 


     var old = $.fn.popover 

     $.fn.popover = function (option) { 
     return this.each(function() { 

      var $this = $(this) 
      , data = $this.data('popover') 
      , options = typeof option == 'object' && option 

      if (!data) $this.data('popover', (data = new Popover(this, options))) 

      if (typeof option == 'string') data[option]() // <-- 3. this line has no semicolon no comma, why...? 

     }) 

     } 
    ....................................... 

    }(window.jQuery); // <-- 4. what does this line mean? 
+0

«2. В некоторых строках нет точки с запятой и запятой, почему?» - по умолчанию javascript добавляет точку с запятой к каждой новой строке. Для получения дополнительной информации: http://mislav.uniqpath.com/2010/05/semicolons/ –

ответ

0

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

Так, например, следующее прекрасно.

var square_something = function(x) { return x * x; }; 
alert(square_something(5)); 

Принимая эту концепцию на шаг дальше, мы можем сделать что-то вроде

alert(function(x) { return x * x; }(5)); 

То есть, вызывать (или вызов) в (анонимный) функции со значением 5

другой замечательная особенность сценария Javascript/ECMA заключается в том, что символ «$» является вполне допустимым именем переменной. Поэтому я могу сделать

var $ = 5; 
alert ($); 

И я увижу значение 5 отлично. Библиотека jQuery широко использует это, как и другие библиотеки Javascript. Или ...

var myFunc = function($) { alert($ + 10); } 
myFunc(32); // should alert the number 42 

В расширениях jQuery вы часто увидите этот шаблон ...

function($) { 
    // all the extension code... 
}(window.jQuery); 

Скажем, вызывать анонимную функцию со значением window.jQuery. Они делают это, потому что другие библиотеки Javascript используют переменную $, но не переменную window.jQuery. Это очень тонкий способ использовать очень короткий и convienent $ вместо window.jQuery везде, только в пределах определенной функции.

Чтобы ответить на ваш вопрос «без полуколонии» ... На линии, о которой вы упоминаете, нет полуколоны, потому что там не требуется. Однако это потребовало бы, если бы у вас была другая линия.

+0

EMCA опечатка здесь. –

+0

спасибо за советы – user2541924

3

!function ($) {...}(window.jQuery); эквивалентно (function ($) {...})(window.jQuery); или (function ($) {...})(window.jQuery);, который имеет такое же поведение.

Это IIFE, само вызывается функция: http://en.wikipedia.org/wiki/Immediately-invoked_function_expression

(window.jQuery) является парам передается анонимной функции, это положить $ внутри функция относится к JQuery версии, переданной в качестве параметра.

Забудьте рассказать о полуколонии. Следуя ECMAScript, полуколоны являются опциональными, javascript-движок достаточно умный, чтобы найти, когда добавляете их при отсутствии. Но, как примечание стороны, есть конкретное поведение:

После кода всегда будет возвращать «неопределенный»:

return 
     1; 

В этом случае, как новая линия обнаружена, и двигатель не знает, что вернуться, точка с запятой будет добавлена ​​между утверждением возврата и стоимостью, что дает:

return ;1; 

Так используйте: return 1; без новой линии между ним. return 1 тоже будет работать.

+0

спасибо за ваш ответ !! – user2541924

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