一:函数定义分为两大类,两大类里又可以细分
1,普通函数声明
例如function a(x){return x+1}
2,函数表达式来定义有函数名(递归调用时有用,一般不用):例如
var a = function face(x){
if(x<1)return 1;
else return x*face(x-1)
}; //可以用来进行递归调用
3,函数表达式来定义函数名,例如
var a=function(x){
return x+1;
};
调用方式为a(x)
也可以定义完直接调用 var a =(function(x){renturn x*x}(10))
4,当作对象的一个方法来定义
var o={
y:2,
m:function(x){
console.log(x+this.y) //3
}
}
o.m(1);
二:函数调用
1)普通函数调用 例如: a(x,y)
this一般不出现在函数里,即使存在也只是用来判断是否为严格模式,a(x,y)
2)方法调用: o.m=function(){}
a. 指的是调用对象里的方法,调用用o.m(x,y),也可以用【】进行调用,例如0["m"](x,y);
b. 可以继续访问返回值中的方法:customer.f().m();
c. this在方法里边代表方法所在的对象也就是o,通过this可以调用o对象里的所有属性。
d.如果对象里,函数嵌套函数,被嵌套的函数里的this不指向该对象
var o={
m:function(){
var seft=this;
console.log(this===o);//true
f();
function f(){
console.log(this===o)//false
console.log(seft===o)//true
}
}
}
o.m();
3) 构造函数调用
var o=new Object(); 或者var o=new Object;如果不带参数也可以忽略后边的括号
a,构造函数顶以后会创建一个新空对象,该对象继承构造函数的prototype属性。
b,this指向新创建的对象,可以用来引用这个对象的上下文
c,返回值永远是这个对象,如果指出return的是一个对象那么返回值就是一个对象。
如果有return但没有指定值,或者返回一个原始值,那么回忽略这个返回值,返回值还是这个新对象。
4)间接调用
用call()和apply()进行调用,(稍后补充)