你有没有看过JQuery 1.4源代码的内幕,并注意到它是如何以下列方式封装的:
(function( window, undefined ) {
//All the JQuery code here
...
})(window);
Run Code Online (Sandbox Code Playgroud)
我读过一篇关于JavaScript Namespacing的文章和另一篇名为" 一对重要的Parens "的文章,所以我知道这里发生了什么.
但我以前从未见过这种特殊的语法.在那undefined做什么?为什么window需要通过然后再次出现?
(function() {})()并且它的jQuery特定表亲(function($) {})(jQuery)一直在Javascript代码中弹出.
这些结构如何工作,它们解决了哪些问题?
举例赞赏
我在Node.js应用程序中看到了一段JavaScript代码.
( function() { console.log("gg") } )(this)
Run Code Online (Sandbox Code Playgroud)
我想知道为什么使用=>(function(){})(this)这种类型的结构,以及如何编译.
我理解为什么我们有这两个方括号()(),以及为什么这个代码可以工作.
围绕Modernizr源代码,我发现了一件奇怪的事情:
window.Modernizr = (function(window,document,undefined) {
Run Code Online (Sandbox Code Playgroud)
之后,将使用两个参数(this, this.document)调用此函数.
为什么undefined在这里使用?它有意义还是只是奇怪的代码风格?
在查看jQuery的未压缩源代码时,我偶然发现了一些我不太了解的内容.当创建他们的匿名函数时,他们将undefined作为第二个参数.这是做什么的,为什么他们使用undefined?是否有必要将undefined作为参数放在匿名函数中?以下是我所谈论的一个例子.
(function( window, undefined) {
...code here
})( window );
Run Code Online (Sandbox Code Playgroud) 好的,我正在为自己写一个项目的js库,我有一个问题.像大多数其他库一样,为了保留我的变量范围,我将代码包装在此:
(function() {
// my code here
})();
Run Code Online (Sandbox Code Playgroud)
现在我的问题是:我注意到jQuery传递了window对象并设置了自己的文档对象,如下所示:
(function(window) {
var document = window.document;
})(window);
Run Code Online (Sandbox Code Playgroud)
有谁知道他们为什么这样做?
可能的重复:
这个JavaScript/JQuery语法如何工作:( function(window,undefined){})(window)?
使用(函数(窗口,文档,未定义){...})(窗口,文档)赋予什么优势?
我见过很多javascript库创建一个名为"undefined"的变量,iam无法弄清楚它的用途,下面是从jQuery库复制的行
* Date: Wed Feb 23 13:55:29 2011 -0500
*/
(function( window, undefined ) {
// Use the correct document accordingly with window argument (sandbox)
var document = window.document;
var jQuery = (function() {
Run Code Online (Sandbox Code Playgroud)
请告诉我这样做的原因和好处!!
我注意到,谷歌关闭编译没有重命名document为类似d减少的空间.
我想不出这会破坏代码的情况(即document指向其他东西的地方).实际上也是如此window.
是否有理由保护document这种方式?
==编辑==
通过重命名它我正在考虑重新分配它.以下示例.
var d=document;
var obj1=d.getElementById("obj1");
var obj2=d.getElementById("obj2");
... // with enough uses of document so it makes to reassign it size-wise.
Run Code Online (Sandbox Code Playgroud) 我正在尝试编写一个简单的Facebook应用程序.在我需要的代码中,我发现了这个:
// Load the SDK asynchronously
(function(d){
var js, id = 'facebook-jssdk', ref = d.getElementsByTagName('script')[0];
if (d.getElementById(id)) {return;}
js = d.createElement('script'); js.id = id; js.async = true;
js.src = "//connect.facebook.net/en_US/all.js";
ref.parentNode.insertBefore(js, ref);
}(document));
Run Code Online (Sandbox Code Playgroud)
为什么这个函数被包裹在()中并且(文档)最后被打了?我以前没见过这种JavaScript法术.
感谢您的任何意见.