arguments相关

一,函数的相关属性。
function foo(x,y,z){
   do something...
}
foo(1,2).
foo.length = 3;
foo.name = foo.
也就是说,函数的length属性,会返回该函数形参的数量
name属性返回函数名

二,arguments相关。

    arguments是一个类数组对象,主要用途是保存函数参数。非严格模式下,跟函数的参数有绑定关系,比如下面中,

    arguments[0]对应参数x,以此类推。

在上面的例子中,
function foo(x,y,z){
   arguments[0] = 10;
   arguments[1] = 100;
   arguments[2] = 200;
}
foo(1,2);
但是foo(1,2)只传入了1,2两个参数,对应的z参数没有传入,就会与arguments失去绑定关系。然后参数1,2,被arguments变为了10,100.

此外,arguments还有一个属性callee,callee是一个指针,用来指向拥有这个arguments的函数对象。

上面的例子中,arguments.callee === foo //返回true

三,apply和call。

一个小例子,
function fn(x,y){
   console.log(x,y,this)
}

fn.call(100,10,20) //10,20,Number(100)
fn.apply(null,10,20) // 10,20, window
fn.apply(undefined,1,2) //1,2,window

就是说,apply或call的第一个参数如果是null或undefined,this就会指向window。这是在非严格模式下的。

那如果是在严格模式下,this指向的就是null和undefined本身。

四,关于bind。

  bind方法是ES5才提供的。IE9才支持、

举个小例子

this.x = 9;
var module = {
   x:81,
   getX:function(){return this.x}
}

那如果直接用module对象去调用getX方法
module.getX() //返回81

如果将该方法赋值给一个全局变量,
var get = module.getX;
 get() //返回9  因为this指向了window

这个时候可以使用bind方法绑定module,在赋值给全局变量
var boundGetX = get.bind(module)

上面的例子使用call或apply行不通。

为什么呢?其实我也不知道。但是这三个方法的作用是一样的。都是用来绑定指定this的,

除了传参的方式apply不太一样。

这样写的时候call和apply起作用
get.call(module)
get.apply(module)

但是赋值给一个变量就不起作用了。想bind那么写。
然后bing想call这样写也不起作用。
get。bind(module)好像是会返回函数本身

此外,使用bind还有一个功能,就是科里化参数。比如

 function fn(a,b,c){
   return a+b+c;
}
var func = fn.bind(null,100) 
func(1,2) //103

var func2 = fn.bind(null,100);
func2(1) //201




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值