可能重复:
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中真的很绿,我想知道某些形式是否错误以及是否有一些最佳实践要遵循。
答案 0 :(得分:4)
就构造函数而言,没有区别。 JavaScript中的所有函数都可以作为构造函数调用(无论它们是否抛出错误都是完全不同的问题)。
区别在于声明函数的方式。
第一个声明是一个需要执行的变量。第二个声明是一个悬挂的功能。
JavaScript中的 var foo
和function foo
语句将被提升到其结束范围的顶部(最近的function
父级)。这意味着:
(function () { //closure for scope
doStuff();
var foo = bar;
}());
实际上是:
(function () {
var foo;
doStuff();
foo = bar;
}());
功能反应相似:
(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!');
}
}());