函数内部属性 arguments、this 以及非继承而来的方法 call()和 apply()

arguments

arguments 是类数组对象,包含传入函数的所有参数。该对象有一个callee属性,是一个指针,指向拥有这个arguments 对象的函数。

//递归
function factorial(num) {
    if(num <= 1) {
        return 1;
    } else {
        return num*factorial(num-1);
    }
}

上面的写法,是可以的,但是如果改函数名就需要同时改两个地方

//将函数名换成arguments.callee(指向函数的指针)
function factorial(num) {
    if(num <= 1) {
        return 1;
    } else {
        return num*arguments.callee(num-1);
    }
}


this

this指向函数执行时所处的作用域。在全局作用域中调用函数时,指向window。 (这种表示不太准确,但我觉得会好理解一点。)

var color ='red';
var obj = {color:'blue'};
function sayColor() {
    return this.color;
}
sayColor();//red
obj.sayColor = sayColor;
obj.sayColor(); //blue

运行结果


call()和apply()

call() 和apply()在特定作用域 调用函数,说白了也就是设置this对象的值,扩充作用域。都包含两个参数,第一个参数是作用域,第二个是传入的参数。
两者接收第二个参数,也就是【传入参数】的方式不同,call() 要一个一个传入,apply接收数组。

function sum(num1, num2) {
    return num1+num2;
}
function callSum(num1,num2) {
    return sum.call(this, num1, num2);
}
function applySum(num1, num2) {
    return sum.apply(this, arguments);
    //return sum.apply(this, [num1, num2]);
}
callSum(10,10);//20
applySum(10, 10);//20

运行结果

//可以与上面this里的例子做个比较
var color ='red';
var obj = {color:'blue'};
function sayColor() {
    return this.color;
}
sayColor();//red
sayColor.call(this); //red
sayColor.call(window); //red
sayColor.call(obj); //blue
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值