Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript构造函数的差异_Javascript - Fatal编程技术网

javascript构造函数的差异

javascript构造函数的差异,javascript,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

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

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(),但我想知道使用一个函数是否比使用另一个函数有任何优势,就您所说的目的而言,它们是相同的

唯一的区别是,在第二个函数中,您有一个从函数本身到函数的干净引用

正式地 :

函数表达式:

函数标识符(opt)(FormalParameterListopt){FunctionBody}

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

语言规范稍后将解释其原因:

注意函数表达式中的标识符可以从 在FunctionExpression的FunctionBody中允许函数 递归地调用自己。但是,与函数声明不同 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));
  }
var f=函数fib(n){

return nSomewhat related:进一步阅读:但是这与构造函数有什么关系呢?对于普通函数来说,这是有意义的。但是对于构造函数,我看不出它有任何影响。你从不从within@Ian好问题,仅仅因为你不应该做某事并不意味着人们不做。例如,你可以返回一个对象,这将使
新的
99.9%毫无意义。我确实以“它们在您所说的目的上是相同的。”@Ian:“您从不从内部调用构造函数”---想象一个树状结构。默认情况下,某个特定类型的特定节点可能会创建同一类型的嵌套节点。@Benjamin Gruenbaum:是的,对于对象来说,这是有意义的。另外一点:命名构造函数在调试中可能很有用。