解答
定义方式不同:普通函数通过 function fName(){ }来定义,函数名一般小写,内部一般都有返回值,使用时直接调用即可;构造函数使用 new 关键字 new Function FName()来定义,函数名一般大写,内部一般无返回值。
内部 this 指向不同:普通函数非严格模式指向 window,严格模式指向 undefined;构造函数内部 this 指向创建的对象实例本身。
返回值不同:普通函数使用 return 时, 返回具体返回值,无 return 时,返回 undefined;而构造函数一般无返回值,调用后返回实例本身,有返回值时,return 值类型时,返回忽略此值,return 引用类型时,返回该引用类型,而不是创建的实例本身。
// 普通函数
function foo() {
console.log(this === window); // 内部指向window
return 'foo';
}
console.log(foo()); // 返回返回值'foo'
// true
// 'foo'
// 构造函数
function Bar() {
this.name = 'bar';
console.log(this); //this指向实例本身:{name:'bar'}
}
var bar = new Bar();
console.log(bar); // 返回实例本身
console.log(bar.name); // 返回实例下的属性值
// {name:'bar'}
// {name:'bar'}
// 'bar'
我还是个菜鸟