Ответ 1
Пример 1:
Я думаю, вы пропустили какой-то код:
(function($) {
$(document).ready(function() {
jQuery.fn.fixEmail = function() {
{
return $(this).each(function() {
var $s = $(this);
...code...
}
}
)(jQuery); //This line was missing in your code.
Перепишите этот код немного, чтобы понять, что происходит.
function complicatedFunction($) {
// the document.ready call goes here.
}
Далее, как бы вы назвали эту функцию?
complicatedFunction(someObject);
Таким образом, внутри сложной функции $ относится к someObject. Согласитесь?
Если вы пишете
complicatedFunction(jQuery);
Затем внутри функции $ ссылается на объект jQuery. Таким образом, все внутри, complexFunction может использовать "$" так же, как и обычный пользователь jQuery.
Возвращаясь к исходному коду, если мы решили не называть эту функцию, т.е. сделать ее анонимной, вы можете визуализировать код, например,
(function($) { })(jQuery);
Вы создаете анонимную функцию, используя один аргумент с именем $. Вы немедленно вызываете эту анонимную функцию, передавая ей объект jQuery. Таким образом, вы не изменяете глобальный объект $, но весь код внутри вашей анонимной функции работает как $всегда. Круто, не так ли?:)
Пример 2:
jQuery(function(){
var $ = jQuery;
var cc = {
mode : 'teaser',
featureVisible : true,
$loader : '<p class="loadingAnimation"><img height="32" src="' +
config.xoImgUrl +
'/images/ajax-loader.gif" width="32" /></p>',
....more code...
}
});
Как и в примере 1, я не видел этот стиль кодирования. (Я даже не уверен, что это сработает)
В любом случае внутри анонимной функции, которая передается в jQuery, вы локализуете использование $без влияния на другой код. И да, они могли бы просто использовать объект jQuery повсюду, но это будет очень многословно, не так ли?
Пример 3:
var $ = {};
Над строкой определяет пустой объект и присваивает его переменной $.
Это то же самое, что и делать,
var $ = new Object();
Это похоже на то, как вы можете определить массив, используя два разных синтаксиса.
var items = []; //same as var items = new Array();
Немного истории
Помните, что в '$' нет ничего особенного. Это переменное имя, как и любое другое. Раньше люди писали код, используя document.getElementById. Поскольку JavaScript чувствителен к регистру, было нормально ошибиться при написании document.getElementById. Должен ли я использовать капитал "b"? Должен ли я использовать "i" идентификатора? Вы получаете дрейф. Поскольку функции являются гражданами первого класса в JavaScript, вы всегда можете это сделать
var $= document.getElementById;//свобода от document.getElementById!
Когда прибыла библиотека прототипов, они назвали свою функцию, которая получает элементы DOM, как '$'. Почти все библиотеки JavaScript скопировали эту идею. Прототип также вводил функцию $$ для выбора элементов с помощью селектора CSS.
jQuery также адаптировал функцию $, но расширился, чтобы заставить все типы "селекторов" получать нужные элементы. Теперь, если вы уже используете Prototype в своем проекте и хотите включить jQuery, вы столкнулись с проблемой, поскольку "$" может ссылаться на реализацию Prototype или реализацию jQuery. Именно поэтому у jQuery есть опция noConflict, чтобы вы могли включить jQuery в свой проект, который использует Prototype и медленно переносит ваш код. Я думаю, это был блестящий шаг на стороне Джона!:)