1.创建一个函数对象——函数在js中也被认为是一个对象,他是一种封装功能的代码
可以把要封装的代码通过构造函数以字符串的形式传给函数对象
var fun1=new Function("document.write('你可真是有够笨的啊!'+'</br>');")
fun1();
fun1.app="fun1";
document.write(fun1.app);
2.使用函数声明——常用
function fun2(x,y,z)
{
document.write(x+'</br>');
document.write(y+'</br>');
document.write(z+'</br>');
}
fun2("leeya忘N负E","深海鱼Biss","肉蛋充饥");
3.函数表达式创建函数
var ufc=function(){
document.write("你在玩什么呢?"+"</br>");
}
ufc();
4.JS的函数返回问题
如果return后不跟任何值就相当于返回一个undefined,如果函数中不写return,则也会返回undefined,而且JS函数的返回值不像C++/C,它可以直接返回任意类型。
5.JS函数的参数可以传递函数对象——这也很好的解释了为什么微信小程序可以在Page等,传入那么多的页面函数,App函数
还可以使用匿名函数,很方便
var wx=function(x)
{
x("我可以习惯远距离","爱总是身不由己","多远都要在一起");
}
wx(fun2);
6.JS函数对象和函数调用
fun代表的是一个函数对象,直接使用函数对象,而fun()代表的是调用函数,获取函数的返回值或者操作。
7.在JS函数内部任然可以在声明函数,函数的返回值也可以返回函数对象或者函数调用
function fun4(){
function fun_son(x){
document.write("你的心有一道墙"+"</br>");
}
return fun_son();//这里可以返回一个函数对象也可以返回一个函数调用
}
fun4();
8.立即执行函数
函数一定义完成立即被调用,但是我在使用过程中发现它在所有执行之前执行,不知道对不对。
(function(a,b){
alert("立即执行函数 "+a+b);
})(52,0);
9.函数对象的call()方法和apply()方法
当函数对象调用call()和apply()方法的时候都会调用函数执行,在调用这两个方法的时候可以将一个对象指定为第一个参数,此时这个对象就是函数调用过程中的this.哪怕是对象的属性函数调用的时候同样可以这样调用传参修改函数在执行过程中的this对象。
function men(age,tall,weight,loving){
this.age=age;
this.tall=tall;
this.weight=weight;
this.loving=loving;
}
TBW=new men(19,172,140,"打篮球");
MLT=new men(20,188,180,"泡妹");
function whatAge(){
document.write("Age:"+this.age)
}
//call()
whatAge.call(TBW);
//apply()
whatAge.apply(MLT);
call()方法可以将实参在对象之后依次传递,apply()方法需要将实参封装到一个数组中统一传递。
function men(age,tall,weight,loving){
this.age=age;
this.tall=tall;
this.weight=weight;
this.loving=loving;
}
TBW=new men(19,172,140,"打篮球");
MLT=new men(20,188,180,"泡妹");
function whatAge(a,b){
document.write(a+b+"-Age:"+this.age)
}
//call()
whatAge.call(TBW,"Tu","BoWen");
//apply()
whatAge.apply(MLT,["JR","Molant"]);
10.分析函数调用过程中this的情况
——以函数形式直接调用,this是window
——以方法形式调用。this是调用方法的对象
——以构造函数的形式调用,this是新创建的那个对象
——使用call和apply调用时,this是指定的那个对象
11.调用函数时,浏览器每次都会额外在传进来一个arguments对象
arguments是一个类数组对象,它也支持使用下标获取操作数据,也能获取长度,他其中保存的是我们调用函数时所传递的参数,arguments.length可以获取参数数组的长度,我们即使不在函数声明中定义形参,也可以通过arguments数组来获取传入的参数,arguments[0]表示我们在调用函数时传入的第一个参数,arguments[1]是第二个参数,arguments中还有一个属性叫做callee,这个属性对应一个函数对象,就是当前执行函数的函数对象
function fun_ar(a){
document.write("参数:"+a);
document.write("参数列表[0]:"+arguments[0]);
document.write("参数列表[1]:"+arguments[1]);
document.write(arguments.callee==fun_ar);
}
fun_ar("明天","你好");