定义这些对象有什么区别?

时间:2012-08-13 03:09:40

标签: javascript

这些之间有什么区别?

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

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

我的问题是,(function(){}())做了什么?

3 个答案:

答案 0 :(得分: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;,因为匿名函数没有副作用,也没有返回值。

答案 1 :(得分:4)

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

person将为undefined,因为该函数没有return语句。

它只是一个自动执行的匿名函数,您可以将其映像如下。

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

答案 2 :(得分:2)

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

这种技术很有用,因为它允许你在你的班级范围内成员。

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

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