🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
## 函数的声明 1.普通声明 ~~~ function box(a,b){ ....... } ~~~ 2.变量初始化函数 ~~~ var box =function(a,b){ ........... } ~~~ 3.使用Function构造函数,不推荐 `var box =new Function('a','b','return a+b');` ## 函数的传递 * 作为函数的返回值来传递 `box(sum(10),20);` * 作为函数本身传递 ~~~ function box(a, b) { return sum(b); } function sum(c) { return c + 20; } alert(box(sum, 40)); ~~~ ## 函数内部有2个对象 * arguments 主要用途保存函数参数,arguments的属性callee,是一个指针,指向arguments所属的函数 ~~~ function box(a){ if(a<=1){ return 1; }else{ return a*arguments.callee(a-1); //arguments.callee()代表函数自身 } } alert(box(10)); ~~~ * this 代表函数所处的作用域对象,全局作用域下this代表window ## 函数的属性和方法 函数也是对象,也有属性和方法 函数2个属性: * **length** box.length表示函数参数的个数 * **prototype** prototype有2个方法:主要作用是**改变作用域**,使对象和函数不发生耦合关系 * apply(); //用一个函数冒充另一个函数,执行这个函数的内容 * call(); //和apply方法一样,只是参数的写法不同,不传参,call更方便 ~~~ function box(a,b){ return a+b; } //sum冒充box,执行相加功能 function sum(a,b){ return box.apply(this,[a,b]); //this表示box在window下面,[]里面是box的参数 } //另一种方法 function sum2(a,b){ return box.apply(this,arguments); //arguments当数组传递 } //call方法 function sum3(a,b){ return box.call(this,a,b); //arguments当数组传递 } alert(sum(10,20)); alert(sum2(10,20)); alert(sum3(10,20)); ~~~ //改变作用域实例 ~~~ color="红色"; box={ color:"蓝色" } function say(){ alert(this.color); } say.call(this); //红色 say.call(box); //蓝色 ~~~