关于函数属性arguments

函数属性&arguments
例:
function foo(x,y,z){
console.log(arguments.length); //2 实参个数
console.log(arguments[0]); //1 arguments是类数组与Array不同
arguments[0]=10;
console.log(x); //10 严格模式下,这里x为1

arguments[2]=100;
console.log(z); //still undefined,只传入了两个参数,不存在第三个参数
console.log(arguments.callee===foo); //true callee是arguments的一个属性,包含当前正在执行的函数 严格模式下,callee不能使用

}

foo(1,2);
foo.length; //3 形参个数
foo.name; //函数名称



apply/call方法(浏览器)
例:
function foo(x,y){
console.log(x,y,this);
}

foo.call(100,1,2); //1,2,Number(100)
foo.apply(true,[3,4]); //3,4,Boolean(true)
foo.apply(null); //undefined undefined window(global对象) 严格模式下,this返回null
foo.apply(undefined); //undefined undefined window(global对象) 严格模式下,this返回undefined



bind与currying
例1:
function add(a,b,c){
return a+b+c;
}
//函数柯里化是把一个函数拆分成多个单元,有时候我们不需要将函数一次性调用完,例如上面的例子,而是调用把前两个参数传完了得到这样的函数并且再去传入第三个值

例2:
var func=add.bind(undefined,100); //这里,通过bind绑定了第一个参数a
func(1,2); //103 再将1,2赋值给b,c
var func2=func.bind(undefined,200); //这里又绑定了一次,这回绑定给了第二个参数b
func2(10); //310 所以这里的10是传给参数c

应用:
function getConfig(colors,size,otherOptions){
console.log(colors,size,otherOptions);
}
var defaultConfig=getConfig.bind(null,'#d07090','1024*768');
defaultConfig('123');
defaultConfig('456'); //可以固定前两个参数的值,在做修改时,只会改变第三个参数的值,提高了便利性



bind与new
例:
function foo(){
this.b=100; //创建一个全局变量b
return this.a;
}

var func=foo.bind({a:1});
func(); //1
new func(); //{b:100}(对象名字为foo) 在使用new时,this会指向一个空对象,空对象的原型会指向foo.prototype,空对象的这个b属性会被赋值为100,并会忽略掉return,也就是当使用new时,bind方法会被忽略掉







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值