Tengo un pequeño problema para comprender el signo $ como un alias para la función jQuery, particularmente en un complemento. ¿Puede explicar cómo jQuery logra este alias: cómo define '$' para que sea un alias para la función jQuery? Esa es la primera pregunta.
En segundo lugar, ¿puede explicar cómo/por qué funciona el siguiente código para asignar '$' a la función jQuery en la definición de un complemento y por qué si no hace esto, su complemento podría colisionar con otras bibliotecas que podrían usar el signo de dólar?
(function( $ ){ $.fn.myPlugin = function() { // Do your awesome plugin stuff here }; })(jQuery);Simplemente declara una variable. Ver aquí
jQuery en sí mismo es una gran función autoejecutable. Esto significa que declara una función y luego la ejecuta. Dentro de la función declara el objeto jQuery local que es una función.
Luego, justo al final, establecerá window.jQuery = window.$ = jQuery
Esto es establecer tanto window.jQuery como window.$ en el objeto jQuery local. Podemos establecer variables globales haciéndolas propiedades del objeto window .
Ahora tanto window.jQuery como window.$ apuntan a jQuery ya que los objetos se pasan por referencia.
var jQuery = (function() { var jQuery = function( selector, context ) { ... }; ... return (window.jQuery = window.$ = jQuery); }());en realidad declara jQuery dos veces para una pequeña ganancia de eficiencia ya que cuando busca la variable no tiene que mirar hacia arriba en una función externa adicional.
Puedes usar dos asignaciones así porque (var a = b) === b
Como otros han mencionado, el hecho de que $ es un nombre de variable legítimo y que las funciones son objetos de primera clase, por lo que podemos tratarlas como objetos también ayuda a que esto sea posible.
Una función, como cualquier objeto en javascript, se puede asignar a una variable. Esta variable puede tener cualquier nombre (que siga las reglas de nomenclatura de variables JS). "$" cumple con las reglas de nomenclatura, por lo que la función jQuery tiene un alias de "$" por brevedad. Considere el siguiente ejemplo:
var myFn = function() { alert('myFunc'); }; var $ = myFn; $(); // alerts 'myFunc'Código exacto (de jquery-1.4.1-vsdoc.js):
// Expose jQuery to the global object window.jQuery = window.$ = jQuery;