1

可能重复:
JavaScript:var functionName = function() {} vs function functionName() {}

我想知道以下两个构造函数之间是否存在一些隐藏的区别:

var Person = function(name){
     this.say=function(){
         console.log(name);
     }
}

和这个:

function Person(name){
         this.say=function(){
             console.log(name);
         }
  }

假设我们总是要写:

var x = new Person('xxxxx');
x.say();

对我来说似乎是一样的,但我真的很喜欢 javascript,我想知道某些形式是否错误以及是否有一些最佳实践可以遵循。

4

1 回答 1

4

就构造函数而言,没有区别。JavaScript 中的所有函数都可以作为构造函数调用(它们是否抛出错误完全是一个不同的问题)。

区别在于函数的声明方式。

第一个声明是作为需要执行的变量。第二个声明是作为一个被提升的函数。

var foofunction fooJavaScript 中的语句被提升到其关闭范围的顶部(最近的function父级)。这意味着:

(function () { //closure for scope
  doStuff();
  var foo = bar;
}());

实际上是:

(function () {
  var foo;
  doStuff();
  foo = bar;
}());

函数的反应类似:

(function () {
  doStuff();
  function foo() {
    bar = baz;
  }
}());

是相同的:

(function () {
  function foo() {
    bar = baz;
  }
  doStuff();
}());

这种区别很重要,因为在变量中声明的函数只有在声明之后才能访问:

(function () {
  foo(); //this doesn't work and will result in an error
  var foo = function () {
    alert('works');
  };
}());

而只要函数在范围内,就可以访问它:

(function () {
  foo(); //works!
  function foo() {
    alert('works!');
  }
}());
于 2012-10-10T19:08:43.340 回答