这部分是一个jquery问题,但大多数是javascript。我只是不太了解javascript以理解这段代码:
1 (function () {
2 $(function () {
3 //Global ajax progress dialog box
4 //Simply run $("#ajax-progress-dialog").dialog("open"); script before the ajax post and
5 //$("#ajax-progress-dialog").dialog("close"); on the ajax post complate
6 $("#ajax-progress-dialog").dialog({
7 autoOpen: false,
8 draggable: false,
9 modal: true,
10 height: 80,
11 resizable: false,
12 title: "Processing, please wait...",
13 closeOnEscape: false,
14 open: function () { $(".ui-dialog-titlebar-close").hide(); } // Hide close button
15 });
16 });
17 })();
我理解第3-15行。事实上,我认为我理解第2到16行:这是创建一个匿名函数并将其包装为jquery对象,对吧?不知道为什么需要包装,但更重要的是,我特别不理解第1行:打开“(函数”和17:关闭“)()”。那是什么意思?
顺便说一下,为了完整起见,请注意,调用如下:
$( “#Ajax的进展-对话”)对话框( “开放”);
信用:此示例来自tugberkugurlu
答案 0 :(得分:1)
它基本上创建了一个匿名函数并立即运行它。这对于创建闭包很有用,例如使用var x, y, z
运行代码而不会污染当前(通常是全局)范围。
答案 1 :(得分:1)
它是一个自我执行的函数,基本上它将所有内容都保留在全局范围之外。在帖子中解释:What is the purpose of a self executing function in javascript?
但是在这个示例代码中,您显示它不是必需的。
的文件准备好了$( function(){
...
});
做同样的事情。
答案 2 :(得分:0)
当使用匿名函数调用$()时,一旦DOM准备就会调用给定的匿名函数。这是$ .ready()的快捷方式。有关相关信息,请参阅http://api.jquery.com/ready/。
至于第一行和最后一行,我相信它正在声明另一个匿名函数,然后立即调用它。不过,我并不完全是为什么与编写函数的内容有所不同。
编辑:Kolink是对的,用于限制范围。但是,在这个特定的例子中,这似乎没有任何好处。
答案 3 :(得分:0)
此方法用于创建闭包并“保护”变量。
答案 4 :(得分:0)
这不是jQuery特有的东西,但它被称为闭包。这意味着你在其中使用的任何内容仍然在该闭包的范围内,因此它不会与其他地方使用的代码冲突(当你使用大量脚本或jQuery插件时很重要)。
您可能会看到传递窗口和文档参数的示例,作为document ready
等效项:
(function(document, window) {
var closure_test = 'Hello world!'
console.log(window.location.href, closure_test);
})(document, window);
console.log(closure_test);
通过Chrome的JS控制台(或Firebug)运行,您会注意到closure_test
可以在闭包内部访问,但在其外部未定义。
您可以使用它进行更多操作,您的示例代码无法演示。例如。使用它来模仿一个类而不使用原型:
var exClass = (function() {
function private() {
return 'I am private';
}
// return an object of functions or properties we want to expose
return {
public: function() {
return 'I am publicly accessible';
}
}
})();
console.log(exClass.public());
// I am publicly accessible
console.log(exClass.private());
// object has no method 'private'
console.log(private());
// undefined
注意你怎么不能进入名为private的函数,但你可以使用名为public()的函数。