除了解析构造函数之外,这两个之间有什么区别吗?
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的优势
答案 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));
}