Possible Duplicate:
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 真的很陌生,我想知道是否有某种形式是错误的,以及是否有一些最佳实践可以遵循。
就构造函数而言没有区别。 JavaScript 中的所有函数都可以作为构造函数调用(它们是否抛出错误完全是另一回事)。
区别在于函数的声明方式。
第一个声明是一个需要执行的变量。第二个声明作为提升的函数。
JavaScript 中的
var foo
和 function foo
语句被提升到其关闭范围的顶部(最近的 function
父级)。这意味着:
(function () { //closure for scope
doStuff();
var foo = bar;
}());
实际上是:
(function () {
var foo;
doStuff();
foo = bar;
}());
函数的 react 相似:
(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!');
}
}());