Javascript jQuery编写和关闭

Javascript jQuery编写和关闭,javascript,jquery,Javascript,Jquery,我正在读一篇关于写一个符号的文章,有一节讨论了如何保存美元符号符号,这样它就不会与其他使用它的库发生冲突 它说: 将jQuery传递给自执行函数是最佳实践 (闭包)将其映射到美元符号,这样它就不会被覆盖 由另一个库在其执行范围内执行 他们是如何做到这一点的: (function( $ ) { $.fn.myPlugin = function() { // Do your awesome plugin stuff here }; })( jQuery ); 我试图理解他们在说

我正在读一篇关于写一个符号的文章,有一节讨论了如何保存美元符号符号,这样它就不会与其他使用它的库发生冲突

它说:

将jQuery传递给自执行函数是最佳实践 (闭包)将其映射到美元符号,这样它就不会被覆盖 由另一个库在其执行范围内执行

他们是如何做到这一点的:

(function( $ ) {
  $.fn.myPlugin = function() {

    // Do your awesome plugin stuff here

  };
})( jQuery );
我试图理解他们在说什么,以及这段代码在说什么。下面的代码是如何计算的

函数($){}
是否执行并获取传递给它的
jQuery
对象

jQuery对象是否成为$

是<代码>函数($){…}通过传递给它的
jQuery
对象执行。
$
参数隐藏父作用域的
$
变量(如果有),并为其提供
jQuery
变量的值,但仅针对该代码块

您希望这样做的原因是,
$
可能会被其他库使用(比如,),但您仍然希望能够在插件中使用
$
缩写来表示
jQuery
。通过创建一个以
$
为参数的函数,并以
jQuery
作为该参数执行该函数,您可以在该函数内部使用
$
而不是
jQuery
,而不必像原型那样覆盖函数外部的
$
<代码>函数($){…}通过传递给它的
jQuery
对象执行。
$
参数隐藏父作用域的
$
变量(如果有),并为其提供
jQuery
变量的值,但仅针对该代码块


您希望这样做的原因是,
$
可能会被其他库使用(比如,),但您仍然希望能够在插件中使用
$
缩写来表示
jQuery
。通过创建一个以
$
为参数的函数,并以
jQuery
为参数执行该函数,您可以在该函数内部使用
$
而不是
jQuery
,而不必像原型那样覆盖函数外部的
$

function add_my_plugin_to_fn($) {
  $.fn.myPlugin = function() {
  }
}

add_my_plugin_to_fn(jQuery);

所有这些都将向jQuery的fn.myPlugin属性添加一个函数。我们使用$的唯一原因是,jQuery用户喜欢使用单个字母“$”作为函数名。它可以是
jQuery.fn.myplugin
jq.fn.myplugin
\uuuq.fn.myplugin

这可以让你摆脱这种情况

my_awesome_javascipt_.js
    function $(add_to_this) {
      return add_to_this + 1;
    }


jQuery.js

    window.jQuery = //all the jquery stuff
    //sees that window.$ already has a function in it and leaves it alone


my_jquery_plugin.js
  $.fn.myplugin; //this doesn't exist because $ is a function from the first file
  //you should have used jQuery.fn.myplugin. But that is a lot to type out. Doing the 
立即调用函数技巧将强制使用具有文件范围的变量“$”


是的,语言真的应该为你做到这一点。这是一种愚蠢的机制,默认情况下是全球性的。如果您想要解决这个问题,请查看哪些工具可以帮助您编写javascript,而不会出现许多基本错误,这些错误可以写成:

function add_my_plugin_to_fn($) {
  $.fn.myPlugin = function() {
  }
}

add_my_plugin_to_fn(jQuery);

所有这些都将向jQuery的fn.myPlugin属性添加一个函数。我们使用$的唯一原因是,jQuery用户喜欢使用单个字母“$”作为函数名。它可以是
jQuery.fn.myplugin
jq.fn.myplugin
\uuuq.fn.myplugin

这可以让你摆脱这种情况

my_awesome_javascipt_.js
    function $(add_to_this) {
      return add_to_this + 1;
    }


jQuery.js

    window.jQuery = //all the jquery stuff
    //sees that window.$ already has a function in it and leaves it alone


my_jquery_plugin.js
  $.fn.myplugin; //this doesn't exist because $ is a function from the first file
  //you should have used jQuery.fn.myplugin. But that is a lot to type out. Doing the 
立即调用函数技巧将强制使用具有文件范围的变量“$”

是的,语言真的应该为你做到这一点。这是一种愚蠢的机制,默认情况下是全球性的。若你们想要解决这个问题,看看哪一个可以帮助你们在写javascript时避免很多基本错误