我希望了解此代码之间的区别:
(function() {
和这段代码:
$(function() {
第一个示例是否在文档就绪后运行代码,第二个示例是什么?或者仅仅是功能的范围而已?
答案 0 :(得分:5)
第一个例子是一个闭包,它是JavaScript中常用的设计模式。在第二个中,您调用$
函数给出另一个函数作为参数(jQuery将在文档准备好后立即执行它,因为它是$(document).ready(function () {})
的别名)
这是关闭的一个例子:
(function () {
var foo = 'foo';
var bar = 'bar';
window.foo = foo;
})(); // Those () mean that you're calling this anonymous function
console.log(typeof foo); // Logs 'string'
console.log(typeof bar); // Logs 'undefined', since 'bar' is internal to the closure's
// scope and was not exposed like was 'foo'
这是$(function () {})
的一个例子:
$(function () {
alert('Document ready');
});
检查这些页面:
答案 1 :(得分:3)
你的第一个例子就是直接调用匿名函数,它允许你执行类似(demo)的操作:
(function(test) {
alert(test);
})('asd')
而你提供的第二个例子是一个jQuery特定的调用,它在DOM准备就绪后运行 - 它基本上是$(document).ready(function(){});
的简写(see here)
答案 2 :(得分:2)
第一种方法,正在使用自动执行匿名函数。
有关自行执行匿名函数的详细信息,请访问http://markdalgleish.com/2011/03/self-executing-anonymous-functions/
第二种方法,我们正在调用jQuery短版本的ready方法。
调用jQuery ready方法有三个版本(来源: jquery api)
$( document ).ready( handler )
$().ready( handler ) (this is not recommended)
$( handler )
有关jQuery ready方法的更多信息,请查看http://api.jquery.com/ready/
答案 3 :(得分:0)
(function() {
这个javascript闭包是self executing anonymous function
,立即运行
$(function() {
jQuery factory function
接受函数作为参数和runs after DOM is ready
答案 4 :(得分:0)
第一个:
(function() {
是self-invoking function(一个自称的匿名函数),如:
(function(){ // some code… })();
第二个:
$(function() {
是一个特定于jQuery的DOM就绪事件处理函数,就像jQuery $(document).ready
函数一样。
答案 5 :(得分:0)
(function() {
// Code goes here
}());
这是一个“立即函数”,意味着它在定义后立即执行。它也是一个匿名函数,因为它没有名称。
此构造用于为不污染(通常)全局命名空间的脚本提供变量范围。这通常被称为“封闭”。不污染全局命名空间是一种很好的做法,因为它可以防止混淆变量名称并且无意中弄乱其他脚本的操作。
$(function() {
// Code goes here
});
这是jQuery的$(document).ready(function() { /* code goes here */ })
的简写。它只在整个DOM被渲染时才执行代码,并且被认为是准备好的。如果您的脚本插入<body>
的最末端,通常可以省略此项。
答案 6 :(得分:0)
第一个通常会立即运行代码,但仅仅是因为未显示的代码,在匿名函数定义的末尾。它会因为:
而被调用(function() { doSomething(); } ());
请注意,这会立即运行,而不是在加载文档后运行。尾随空的parens调用函数,参数为零,就像调用myFunction()
时一样。它通常以这种方式写入“范围”变量。例如,您可以像这样包装整个javascript文件,以保护它免受其他包含的文件的侵害。
在第二个示例中,$实际上是一个函数。它是“jQuery”的同义词,因此$()
就像jQuery()
一样。 jQuery实际上也会立即运行此函数,并以匿名函数定义作为参数。当你传递这样一个函数定义时,jQuery立即做了什么,是文件就绪事件触发时运行的函数定义队列。