有人可以向我解释下面的代码是什么,它是如何工作的以及为什么使用它?
我不明白为什么函数在括号内或括号后面的括号中。
(function () {
//Some javascript code...
}());
谢谢。
编辑/跟进问题:
现在我更好地理解上面的内容,与jQuery一起使用会有什么影响:
$(document).ready(function () {
(function () {
//code here
}());
});
答案 0 :(得分:3)
这是一个自动执行的功能。它创建一个匿名函数并立即执行它。
它可用于多种用途,例如创建新范围。
var x = 10
(function () {
var x = 5
}())
alert(x) // 10
答案 1 :(得分:3)
这是一个自动执行的匿名函数。
首先是匿名函数:
(function(){
//Normal code goes here
})
真正有趣的部分是当我们在最后添加这个时发生的事情:
();
这些括号会导致前面括号中包含的所有内容立即执行。
Javascript具有功能级别范围。匿名函数中定义的所有变量和函数都不能用于它之外的代码,有效地使用闭包来密封外部世界。
此设计模式对模块化Javascript非常有用。
您可以在这里阅读更多内容: What is the purpose of a self executing function in javascript?
答案 2 :(得分:0)
@doornob是对的。但是,原始帖子中存在语法错误。它应该是这样的:
(function() {
// your code goes here
})();
虽然这通常被描述为“自动执行功能”,但更准确的术语是“立即调用功能表达”。我们可以称之为“不确定”。这是一种封闭。
此模式通常扩展为称为模块模式的模式,如下所示:
var myModule = (function() {
var my = {};
var privateFoo = 'I am foo. I am a private field!';
my.publicMethodGetFoo = function() {
return privateFoo;
}
return my;
}) ();
这非常类似于传统OOP语言中的类,如C ++或Java。使用var关键字声明的属性无法在模块外部访问。尽管JavaScript中没有访问修饰符这样的东西,但这些属性对于所有意图和目的都是“私有的”。
请注意,我们创建了一个名为“my”的对象。该对象在模块末尾返回,这意味着它暴露在“外部世界”中。因此,它可以在模块外部访问。因此,我们添加到“我的”的任何字段或方法都将是公开的。