2013-04-22 2 views
2

Я работаю с некоторым jquery, который написал кто-то другой, который выглядит следующим образом, и задавался вопросом, почему знак доллара должен быть передан функции javascript updateTextareas.

Используется 2 аргумента: $, $ textareas. Кажется, что он работает нормально только с одним аргументом ($ textareas).

Я пытаюсь выяснить, почему автор будет проходить в $ в качестве первого аргумента в updateTextareas функцию ниже:

(function($) 
{ 
    // why would the first argument ($) need to be passed here? 
    function updateTextareas($, $textareas) 
    { 
     $textareas.each(function() 
     { 
      alert($(this).val()); 
     }); 
    } 

    // document ready 
    $(function() 
    { 
     updateTextareas($, $('textarea.bio')); 
}); 
})(jQuery); 
+0

Он просто позволяет использовать jQuery как '$' без противоречия с другими возможными библиотеками. – SpYk3HH

+0

[Эта старая статья] (http://jquery-howto.blogspot.com/2008/12/what-heck-is -function-jquery.html) Я нашел, может помочь, tho, как упоминалось в ответах ниже, это очень не нужно в новом jQuery. См. Также [jQuery.noConflict()] (http://api.jquery.com/jQuery.noConflict/) – SpYk3HH

+0

Люди .. он спрашивает о функции '' 'здесь '' updateTextareas ($, $ textareas)' – Kaloyan

ответ

0

Идея состоит в том, что это позволит вам пройти «фасад» или другую функцию, которая будет действовать как jQuery. Например, это может быть использовано в модульном тесте.

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

+0

А что это за простой способ? –

+1

@DavidThomas просто издевается над функцией jQuery, когда вы тестируете. –

1

Его так, что этот код, как это или другие плагины могут работать с другими Библиотеки Javascript, которые уже могут использовать знак доллара. В этом случае без гибкой поддержки переименования jQuery (в основном) у вас будут столкновения.

Конечно, автор мог бы первоначально не использовал $ на все и просто использовал jQuery везде и также огибать весь вопрос - но хорошая вещь об использовании $, когда вы можете в том, что его короткой и лаконичной.

+0

Не уверен в этом. Он уже передает jQuery как $ в IIFE, поэтому нет риска столкновения имен. –

+0

Я думаю, что OP путается, почему автор кода передает '$' как аргумент 'updateTextareas()', когда это необязательно. '$' можно было бы просто использовать, поскольку с помощью '(function ($) {}) (jQuery) уже было исключено любое возможное столкновение имен;' – Joe

+0

Большое спасибо, но все же немного запутался. Я думал, что, поскольку функция updateTextareas уже находилась в функции самозапускания, которая использует $ для представления JQuery, что не будет возможности конфликта $ с другими js-библиотеками, использующими $. Извините, только что увидели другие 2 комментария выше после публикации этого. – Frank

2

В точке определения функции:

function updateTextareas($, $textareas) 

Значение $ уже определено в текущей области (передается в качестве аргумента внешней функции), так что передавая ее здесь совершенно бесполезно и может опустить.

Btw, возможно, это было когда-то необходимо, когда функция была определена вне обертки (function($) { ... }(jQuery));.

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