到底是什么!function($){...}(window.jQuery)呢?

时间:2013-01-04 16:33:46

标签: javascript jquery

我想知道这里到底发生了什么。我知道$(document).ready(function() {...});做了什么以及什么时候生效。同样适用于jQuery(function($) {...}

但这是做什么的?

!function ($) {
  $(function(){
    var $window = $(window)
    //normal jquery stuff
  })
}(window.jQuery)

是否在加载jQuery时加载,而不是在文档“准备好”时加载?

5 个答案:

答案 0 :(得分:8)

它创建一个闭包,其中变量$被赋值为window.jQuery

目的是允许将无法命名的变量$用作jQuery的快捷方式,而不会与使用$的大量其他库和自定义函数冲突变量名。

答案 1 :(得分:4)

使用!函数之前的运算符使其被视为表达式

!function () {}()

答案 2 :(得分:3)

您正在查看的语法用于设置jQuery闭包。这用于确保jQuery $变量在代码中可用且正确;即它不能被全球范围内的任何其他东西覆盖(如果你使用多个库,这是可能的)。

这种技术经常被jQuery插件作者使用 - 如果你有兴趣了解更多,docs are here,并更详细地解释为什么你要将jQuery代码包装在像这样的函数中此

在您的示例中唯一不同的兴趣点是,在文档中,函数包含在括号中,而在示例中,您已经给出了它,前面是!

!not运算符,但实际上并没有用于任何事情;我认为只是在那里而不是括号来保存单个字符的代码。如果你正在缩小javascript,可能会有所帮助。

答案 3 :(得分:0)

不太确定,但我猜这有点等同于(function(){})()方法,而且关于js闭包。它确保$jQuery是同一件事

答案 4 :(得分:0)

'!'是一个'不'的运营商。它在代码中没有做任何事情。它存在的唯一原因是表示该函数将立即执行。

您可能还会看到用括号括起来的函数。

(function() {}());

无论使用什么是个人偏好。