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:是的,对于对象来说,这是有意义的。另外一点:命名构造函数在调试中可能很有用。