3

这些有什么区别?

var person = {
    age: 25,
    name: "David"
};

var person = (function() {
    var name = "David", age = 25;
}());

我的问题真的是,有什么作用(function(){}())

4

3 回答 3

7

做什么(function(){}())

这实质上是创建一个匿名函数,然后执行它。一个常见的用途是限制全局变量。

例如,以下将具有三个全局变量(var1var2var3):

var var1 = "a", var2 = "b", var3 = "c";

如果将这些声明包装在匿名函数中,它们仍然可以作为匿名函数中的局部变量访问,但不会混淆全局命名空间。例如:

(function() {
    var var1 = "a", var2 = "b", var3 = "c";
    console.log(var1); // interact with local variables
})(); // execute function.

这些有什么区别?

var person = {
    age: 25,
    name: "David"
};

如果此代码包含在函数中,它会创建一个名为 的局部变量person。否则,它会创建一个名为 的全局变量person

var person = (function() {
    var name = "David", age = 25;
}());

此代码创建并执行一个匿名函数,然后将该匿名函数的返回码分配给变量person。由于匿名函数没有返回值,因此变量person的值为undefined. 就目前而言,这条语句在功能上等同于var person;,因为匿名函数没有副作用,也没有返回值。

于 2012-08-13T03:13:39.570 回答
4
var person = (function() {
    var name = "David", age = 25;
}());

person will be undefined,因为该函数没有return声明。

它只是一个自我执行的匿名函数,您可以如下图所示。

function foo() {
  var name = "David", age = 25;
}
var person = foo();
于 2012-08-13T03:15:20.393 回答
2

它执行您刚刚创建的匿名函数。

这种技术很有用,因为它允许您在类中限定成员。

如果您正在寻找一种进行类和继承的好方法,请查看http://ejohn.org/blog/simple-javascript-inheritance/

我还建议将您的类定义为 AMD 模块。

于 2012-08-13T03:13:18.770 回答