使用var声明javascript对象与使用函数声明javascript对象有什么区别?

使用var声明javascript对象与使用函数声明javascript对象有什么区别?,javascript,function,oop,object,var,Javascript,Function,Oop,Object,Var,我是个糊涂的新手。我在一篇教程中读到,您创建了一个javascript对象,如下所示: function myObject() { this.myProperty = "a string"; this.myMethod = function () { //Method code } } var myObject = { myProperty: "a string", myMethod : function () { //M

我是个糊涂的新手。我在一篇教程中读到,您创建了一个javascript对象,如下所示:

function myObject() {
    this.myProperty = "a string";
    this.myMethod = function () {
        //Method code
    }
}
var myObject = {
    myProperty: "a string",
    myMethod : function () {
        //Method code
    }
}
然后我在其他地方读到,你创建了一个这样的对象:

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

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

这两种声明都是正确的,但它们有不同的语义

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

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

var otherT = new myObject();
otherT.myProperty = "some other value";
第二个类似于静态对象:


这里有一个直接的比较

function myObject() {
这将在解析JavaScript时声明函数

var myObject = function () {
这将在运行时声明函数

如果您使用“var”方法,则必须在使用函数之前声明它。。。试试这个例子

myFunction(); // Works
myVarFunction(); // Boom

var myVarFunction = function () { alert("Hi"); };

function myFunction() { alert("Hi"); };
那么,如果您必须更加小心地使用“var”方法,为什么还要使用它呢?这一切都与范围有关。。。作用域函数被认为更好

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


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

当我们将var添加到变量值赋值时,javascript确保变量仅限于它被赋值的函数,并且不会与另一个函数中的同名变量冲突


当我们不使用var时,它就被声明为一个全局函数,可能会发生冲突。所以,在变量赋值之前,最好使用“var”。如果需要,请使用匿名函数进行闭包。

我宁愿将第二个函数称为没有构造函数的单例函数。感谢您将其与静态对象进行比较。这是一个很好的解释方式。谢谢你的链接!一个回答说var是有范围的,但另一个回答纠正了它,说它们都有范围。我对它进行了测试,在我看来,var和函数作用域是以相同的方式存在的。或者还有其他一些情况不存在?@randomable-是的,在这个场景中的范围似乎会引起混乱。。。我可能是另一个受害者。看看这个: