【问题标题】:What is the difference between declaring javascript objects with var vs. with function?用 var 和用函数声明 javascript 对象有什么区别?
【发布时间】:2011-04-27 13:10:22
【问题描述】:

我是一个困惑的新手。我在一个教程中读到,您可以像这样创建一个 javascript 对象:

function myObject() {
    this.myProperty = "a string";
    this.myMethod = function () {
        //Method code
    }
}

然后我在其他地方读到你创建了一个像这样的对象:

var myObject = {
    myProperty: "a string",
    myMethod : function () {
        //Method code
    }
}

两者之间的(非主观)区别是什么?官方有正确的方式和错误的方式吗?

【问题讨论】:

    标签: javascript function oop object var


    【解决方案1】:

    两个声明都是正确的,但它们的语义不同。

    第一种类型的声明允许您创建对象的实例:

    var t = new myObject();
    // then use t
    t.myProperty = "some value";
    
    var otherT = new myObject();
    otherT.myProperty = "some other value";
    

    第二个几乎就像一个静态对象:

    myObject.myProperty = "some value";
    

    【讨论】:

    • 我宁愿称第二个为 singleton 而没有构造函数。
    • 感谢您将其与静态对象进行比较。这是解释它的好方法。
    【解决方案2】:

    这里是直接比较...

    function myObject() {
    

    这会在解析 JavaScript 时声明函数...

    var myObject = function () {
    

    这在运行时声明函数。

    如果你使用“var”方法,你的函数必须在使用前声明...试试这个例子。

    myFunction(); // Works
    myVarFunction(); // Boom
    
    var myVarFunction = function () { alert("Hi"); };
    
    function myFunction() { alert("Hi"); };
    

    那么,如果您必须更加小心地使用“var”方法,为什么还要使用它呢?这完全与范围有关......范围函数被认为更好。

    更新:这里有一些很好的解释:

    var functionName = function() {} vs function functionName() {}

    【讨论】:

    • 感谢您的链接!一个答案说 var 是作用域的,但另一个答案更正了它,说它们都是作用域的。我对其进行了测试,在我看来 var 和 function 范围都以相同的方式。还是有其他情况他们没有?
    • @randomable - 是的,这种情况下的范围似乎会引起混淆......我可能是另一个受害者。看看这个:developer.mozilla.org/en/JavaScript/Reference/…
    【解决方案3】:

    两者的主要区别在于一个变量是局部的,另一个是全局的。 “var”基本上定义了变量的范围。

    当我们将 var 添加到变量赋值时,javascript 会确保该变量被限制在分配给它的任何函数中,并且不会与另一个函数中的同名变量发生冲突。

    当我们不使用 var 时,它会被声明为全局函数,并且可能会发生冲突。所以总是建议在变量赋值之前使用“var”。如果需要,请使用匿名函数进行关闭。

    【讨论】:

      猜你喜欢
      • 2016-02-04
      • 2011-01-20
      • 2017-08-13
      • 1970-01-01
      • 2010-10-28
      • 2020-07-14
      • 2019-09-21
      • 2018-12-07
      相关资源
      最近更新 更多