why some people write a function like $(function( $ )
我知道像
编写像
没有理由使用
1 | $(function($))... |
如果您在行的开头使用美元符号,那么它依赖于它是一个jQuery对象,所以如果您稍后将jQuery对象作为参数传递以避免冲突,为什么不在第一个地方使用它?现在太晚了......
使用它的正确方法是:
1 2 3 4 5 6 | (function($){ // The dollar variable is a parameter. $(function(){ // You use the $ variable only inside the function. }); })(jQuery); // jQuery is passed as a parameter. $.somePrototypeFunctionHere(); // Here the dollar variable can be something else. |
这毫无用处
这个表格根本没用:
1 2 | $(function($) { }); |
只有在没有其他库可以覆盖
它是如何有用的
由于jQuery将自身作为DOM ready事件处理函数的第一个参数传递,因此您可以充分利用它:
1 2 3 4 | jQuery(function($) { // this === document // $ === jQuery }); |
也可以在源代码中找到此行为的证据:
1 | readyList.resolveWith( document, [ jQuery ] ); |
它将
相当于
有点等同的符号是这样的:
1 2 3 4 | (function($) { $(function() { } }(jQuery)); |
如果你在ready处理程序之外做更多的事情,这将是首选,这实际上比你想象的更频繁。
有许多方法可以在DOM准备好时为DOM初始化jQuery脚本。流行的方法是:
1 | $(document).ready(function(){}); |
同样的简写是:
1 | $(function(){}); |
更新#1:
由于提出
jQuery有一个名为
在Prototype.JS文档中,
此外,
更新#2:关于
没有人使用:
1 | $(function($){}) |
它是
1 | (function($){})(jQuery); |
要么
1 | $(function(){}); |
请检查。 :)
是的,因为您可能知道原型也使用
检查一下
将jQuery与其他库一起使用
1 | $(function( $ ) |
是简写
1 | $(document).ready(function() { |
并且你是对的:
写
你的问题不明确。传递
1 2 3 | (function($) { // Code in here })(jQuery); |
从ready()| jQuery的
别名jQuery命名空间
使用其他JavaScript库时,我们可能希望调用
1 2 3 | jQuery(document).ready(function($) { // Code using $ as usual goes here. }); |
这是指定DOM完全加载时要执行的函数的其他方法。它可以在jQuery中以三种方式完成 -
以下所有三种语法都是等效的:
1 2 3 4 5 | jQuery(document).ready(function($){}) jQuery().ready(function($){}) //(this is not recommended) jQuery(function($){}) |
解决冲突的另一种方法是 -
1 | (function($) { /* some code that uses $ */ })(jQuery) |
你可能想读这个。
1 2 3 | $(function() { // Do your code here... }); |
确保完整下载文档和脚本。
1 2 3 | (function($){ // Do your code here... })(jQuery); |
允许在函数中使用$符号而不与其他库冲突,这给了$符号不同的含义。
所以你可以同时使用上述两个。
1 2 3 4 5 | (function($){ $(function() { // Do your code here... }); })(jQuery); |
这是解决
1 2 3 4 5 | (function($){ $(function(){ // all the code stuff here.... }); })(jQuery); |
你的编辑:
这只是为了保护
从文档中读到:
it's a best practice to pass jQuery to an IIFE (Immediately Invoked Function Expression) that maps it to the dollar sign so it can't be overwritten by another library in the scope of its execution.
1 2 3 | (function($) { // all other things })(jQuery); |
Now within that closure, we can use the dollar sign in place of jQuery as much as we like.
更多这里阅读