企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
## 一、函数声明 a. 普通方式 ~~~ function box(参数){ ...... } ~~~ b. 变量方式 ~~~ var box = function(参数){ ...... } ~~~ c. function构造方法(不推荐) ~~~ var box = new Function('变量1','变量2','函数体'); ~~~ 由此可以看出,函数是对象,函数名是对象的指针 ## 二、函数调用 `box();` 调用的时候可以执行2种操作: 1. `alert();` 2. 返回`return` 3. **作为值的函数**,函数可以作为参数传递给另一个函数 ~~~ //函数作为 返回值 传递 function box(a,b){ return a+b; } function sum(c){ return c+10; } box(sum(20),50); ~~~ ~~~ //函数作为 值 传递 function box(a,b){ return a(b); } function a(sum){ return sum+100; } var result = box(sum,10); ~~~ ## 三、 函数内部属性 ### 1. arguments 主要用来保存参数 注:参数以数组的形式存在arguments中,因此 `arguments.length` 参数长度 `arguments[0]` 获取某个参数 `arguments.callee` 获取自身函数名,递归函数内部会调用自身 ~~~ function box(num){ if(num<1){ return 1; }else{ return arguments.callee(num-1)*num; //return box(num-1)*num; } } ~~~ ### 2.this this 代表外面 "函数" 所处的作用域 对象,最高的作用域的是window ~~~ window.color='红色'; function say(){ alert(this.color); } say(); ~~~ ~~~ var box={ color:'red' } function say(){ alert(this.color); } box.say=say; box.say(); ~~~ ## 四、函数属性和方法 函数是对象的一种,因此有对应的属性和方法 ### 函数属性 `arguments.length` ~~~ //获取函数参数的个数 function box(a,b,c){} alert(box.length); ~~~ ### 函数方法 prototype原型方法 apply,call作用是设置函数内部this的值,在一个函数里面调用别的函数 这2个方法主要作用是改变作用域 #### apply() 参数是数组 ~~~ //原函数 function box(a,b){ return a+b; } //用另一个函数调用这个函数, function add(c,d){ //add冒充box函数的相加功能 return box.repply(this,[c,d]); //此时的this表示window下面的box //下面写起来更方便 //rerurn bxo.repply(this,arguments); } //运行 add(5,10); ~~~ ~~~ box.repply(this,arguments); ~~~ #### call() 参数一个一个传递 ~~~ //方式一,有参数 box.call(this,n1,n2); ~~~ ~~~ //方式二,无参数 box.call(作用域); ~~~ //改变作用域的例子,对象和方法无需任何耦合关系 ~~~ var color='#000'; var box={ color:'#333' } function say(){ alert(this.color); } say.call(window); say.call(this); say.call(box); ~~~ ![](https://box.kancloud.cn/f73a94028e9eb0ceb1da40f45418b6dc_934x503.png)