带你了解js中得函数

函数得隐藏属性

1、arguments
arguments在函数重载和高阶函数中会反复用到。
函数重载:函数名相同,函数的参数列表不同(包括参数个数和参数类型),根据参数的不同去执行不同的操作。

			举例:
					    function overload(a){
					        console.log('一个参数')
					    }
					    
					    function overload(a,b){
					        console.log('两个参数')
					    }
					    
					    // 在支持重载的编程语言中,比如 java
					    overload(1);         //一个参数
					    overload(1,2);    //两个参数
					    
					    
					    // 在 JavaScript 中
					    overload(1);         //两个参数
					    overload(1,2);    //两个参数

js中可以使用arguments进行函数重载效果

						    function overload () {
						      if (arguments.length === 1) {
						        console.log('一个参数')
						      }
						      if (arguments.length === 2) {
						        console.log('两个参数')
						      }
						    }
						    
						    overload(1);      //一个参数
						    overload(1, 2);  //两个参数

升级版:高阶函数

					    function addMethod (object, name, fn) {
					      // 先把原来的object[name] 方法,保存在old中
					      var old = object[name];
					    
					      // 重新定义 object[name] 方法
					      object[name] = function () {
					        // 如果函数需要的参数 和 实际传入的参数 的个数相同,就直接调用fn
					        if (fn.length === arguments.length) {
					          return fn.apply(this, arguments);
					    
					          // 如果不相同,判断old 是不是函数,
					          // 如果是就调用old,也就是刚才保存的 object[name] 方法
					        } else if (typeof old === "function") {
					          return old.apply(this, arguments);
					        }
					      }
					    }

2、this
改变this指针得方式:

apply(this,[a1,a2...])   
call(this,a1,a2....)

3、函数得四种调用方式

a、作为函数调用(作为作用环境得属性)(this指全局对象)
b、作为对象得方法(this指当前对象)
c、作为构造函数(this指实例对象)
d、通过apply和call作为替换调用(this指第一个参数对象)

4、递归:函数内部调用自己或者函数内部函数调用自己得函数。

函数作为对象属性得递归调用,由于是匿名函数,注意引用的丢失。
	解决办法:使用内联定义即可。再起一个函数名字即可。
						使用name可以判断是否为匿名函数。

欢迎star本人github:https://github.com/flyku

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值