javascript构造函数的差异

时间:2013-05-21 22:24:38

标签: javascript

除了解析构造函数之外,这两个之间有什么区别吗?

var Person = function(living, age, gender) {
    this.living = living;
    this.age = age;
    this.gender = gender;
    this.getGender = function() {
        return this.gender;
    };
};

var Person = function Person(living, age, gender) {
    this.living = living;
    this.age = age;
    this.gender = gender;
    this.getGender = function() {
        return this.gender;
    };
};

两者都可以使用

调用
var p = new Person("Yes",25,"Male");

第一个解析为function(),后者解析为person(),但我想知道是否有使用one over other的优势

1 个答案:

答案 0 :(得分:6)

它们与您所说的目的完全相同。

唯一的区别是,在第二个函数中,你可以从函数内部对函数进行干净的引用。

形式上

The language specification states

  

FunctionExpression:

     

function Identifier(opt)(FormalParameterListopt){FunctionBody}

函数表达式中的标识符(在本例中为Person)是可选的

在语言规范中稍后会解释其原因:

  

注意可以引用FunctionExpression中的标识符   在FunctionExpression的FunctionBody中允许该函数   递归地称呼自己。但是,与FunctionDeclaration不同,   FunctionExpression中的标识符无法引用和执行   不影响包含FunctionExpression的范围。

在实践中

您可以在两种情况下使用第二种选项:

当它使你的代码更容易理解时:

   (function removeBodyDivs(){
        //does logic removing
        //divs from the body
   })();

比以下更容易理解:

   (function (){
        //does logic removing
        //divs from the body
   })();

进行递归时,例如

  var f = function fib(n){
      return n<2?2:(fib(n-1)+fib(n-2));
  }