我曾经知道这意味着什么,但我现在正在努力...
这基本上是说document.onload吗?
(function () {
})();
Run Code Online (Sandbox Code Playgroud) 在Flask应用程序中实施Google+登录的Google 教程中,我发现开发人员经常使用一种执行JavaScript代码的笨拙方式:
而不是做
var a = foo(bar);
Run Code Online (Sandbox Code Playgroud)
我看到了这个:
var a = (function() {
return foo(bar);
})();
Run Code Online (Sandbox Code Playgroud)
以奇怪的方式做到这一点的原因是什么?
jQuery站点列出了jQuery的基本插件语法,如下所示:
(function( $ ){
$.fn.myPlugin = function() {
// there's no need to do $(this) because
// "this" is already a jquery object
// $(this) would be the same as $($('#element'));
this.fadeIn('normal', function(){
// the this keyword is a DOM element
});
};
})( jQuery );
Run Code Online (Sandbox Code Playgroud)
我只是想从Javascript的角度理解那里发生了什么,因为它看起来不像我之前看过JS所做的任何语法.所以这是我的问题列表:
如果用函数替换函数($)...,比如"the_function",语法如下所示:
(the_function)( jQuery );
Run Code Online (Sandbox Code Playgroud)
什么是"(jQuery);" 在做什么?围绕the_function的括号是否真的有必要?他们为什么在那里?你能提供的另一段代码是否类似?
它以函数($)开头.所以它创建了一个函数,据我所知,它永远不会被运行,参数为$,已经定义了?那里发生了什么?
谢谢您的帮助!
在UPDATE 2/ANSWER中回答下面的内容
感谢Joseph帮助我找到答案(即使我不喜欢它=).
原始问题
虽然在JavaScript中使用Namepsaces时做的最佳做法的一些研究,我碰到这个定义中的"模型模式"的:http://yuiblog.com/blog/2007/06/12/module-pattern/.
自从我在YUI2年前看到它以来,我一直在使用这种模式,本文给出了概念的一个很好的概述.但它没有触及的是为什么"自我执行匿名函数"被用来代替"新函数".这在评论中被提出,但作者没有很好地描述.由于这篇文章已有4年多了(我在网上其他地方找不到答案),我想我会把它带到这里.
它已经关闭了,所以呢?(请参阅:为什么这个函数包含在括号中,后跟括号?它也没有回答我的问题=).
假设以下设置代码..
var MyNamespace = window.MyNamespace || {};
Run Code Online (Sandbox Code Playgroud)
哪个是首选,为什么?
MyNamespace.UsingNew = new function() {
var fnPrivate = function() {
return "secrets1";
};
this.property = "value1";
this.method = function() {
return "property = " + this.property + ' ' + fnPrivate();
}
};
MyNamespace.UsingSelfEx = (function() { //# <- Added "pre-parens" suggested by chuckj
var fnPrivate = function() {
return "secrets2";
};
var fnReturn = {};
fnReturn.property = "value2";
fnReturn.method = …Run Code Online (Sandbox Code Playgroud) 正如crockford和john resig所主张的那样,应该将对象包装在匿名函数中。但是,如果需要多个实例怎么办?包装后,将仅存在一个实例(单例)。
更新:我忘了说我当然是在谈论框架的根对象(不是jquery,而是我自己的)而不是任何对象。由于它是一个框架,因此实例的数量是未知的,无法由客户端决定。
我猜有99.99%的人只是使用框架而没有建立自己的框架,因此,如果您不知道不要尝试回答某些问题,您可能会不理解自己:)
题:
为什么函数包含在括号中?我从括号中取出了这个代码,它没有任何问题.
在(function(){... Code Here ...})()中使用代码有什么好处?喜欢它在下面的例子中?
码:
(function() {
"use strict";
// Doesn't work because strict mode
// enforces the fact that the second example shouldn't work
if (true) {
function fn1() {
// This won't run
console.log("doesn't work -- have a great Die Hard Day XIII");
};
fn1();
}
})();
Run Code Online (Sandbox Code Playgroud)
代码在这里:将JQuery单词作为参数发送给该命名空间的是什么.我知道函数包含在(...)中的原因是创建一个命名空间.我想一个更好的问题是为什么一个人会传入一个变量,但我想这将是另一个命名空间需要变量的情况.
( function( $ ) {
// Init Skrollr
var s = skrollr.init({
render: function(data) {
//Debugging - Log the current scroll position.
//console.log(data.curTop);
}
});
} )( jQuery …Run Code Online (Sandbox Code Playgroud)