1.function a(){}
该方法的定义是全局性的,就算在调用之后定义,系统也不会报错,可以理解为,系统在执行到该方法时再去找该方法的定义位置进行初始化。存在变量提升问题
2.var a=function(){}
匿名函数的定义方法,若是在定义之前调用了,系统会报错。可以理解为,只用运行到这个方法时才能对变量a进行初始化,若是没有对变量a初始化,则会报错。此时,a代表后面匿名函数的返回值。
详细分析:案例一:
var ManA = function(name,tel){
this.name = name;
this.tel = tel;
var sex = "男";
}
console.log(ManA()) undefined
详细分析:案例二:
var ManB = function(name,tel){
var name = name;
var tel = tel;
var sex = "男";
}
console.log(ManB()) 打印对象
你有没有注意到Man里面name变量前面加了this,如果定义变量的时候前面加了this,就说明这个变量是Man的公共变量,注意不是全局变量,公共变量是指通过Man的实例可以进行读写的变量。function内部定义的时候如果定义变量或者函数前面加了this,基本可以确定这是一个类,类是不能直接使用的,我们需要实例化(new) 那么我们如何使用函数构造对象:
function makeClass(){
return function(args){
console.log(args,arguments)
if ( this instanceof arguments.callee ) {
if ( typeof this.init == "function" ){
this.init.apply( this, args.callee ? args : arguments );
}
} else {
return new arguments.callee( arguments );
}
};
}
var User = makeClass();
User.prototype.init = function(first, last){
this.name = first + " " + last;
};
var user = User("John", "Resig");