在函数内部,有两个特殊的对象:arguments和this。这篇文章主要介绍了函数内部属性之arguments和this ,需要的朋友可以参考下

在函数内部,有两个特殊的对象:arguments和this。

1、arguments

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

经典案例:阶乘函数

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

定义阶乘函数一般都要用到递归算法,如上所示,但你会发现,这个函数的执行与函数名factorial紧紧耦合在了一起,为解决这个问题,我们可以使用arguments.callee。

function factorial(num){
  if(num <= 1){
    return 1;
  }else{
    return num * arguments.callee(num-1);
  }
}

我们重写之后,factorial()函数里没有引用函数名factorial。这样无论引用函数时使用的是什么名字,都可以保证正常完成递归调用。例如:

var trueFac = factorial;

factorial = function(){
  return 0;
}

console.log(trueFac(5)); // 120
console.log(factorial(5)); // 0

2、this

函数内部的另一个对象是this,this引用的是函数执行的环境对象(当在网页的全局作用域中调用函数时,this对象引用的就是window)。

window.color = "red";
var o = { color: "blue" };

function sayColor(){
  alert(this.color);
}

sayColor(); // "red"

o.sayColor = sayColor;
o.sayColor(); // "blue"

在上面这个函数sayColor()是在全局作用域中定义的,它引用了this对象。由于在调用函数之前,this的值并不确定,因此this可能会在代码执行过程中引用不同的对象。

当在全局作用域中调用sayColor()时,this引用的时全局对象window;换句话说,对this.color求值会转换成对window.color求值,于是结果就返回了"red"。而当把这个函数赋给对象o并调用o.sayColor()时,this引用的是对象o,因此对this.color求值会转换成对o.color求值,所以返回“blue”。

函数的名字仅仅是一个包含指针的变量。

总结

以上所述是小编给大家介绍的JS函数内部属性之arguments和this实例解析,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

最新资讯
酷派复牌暴跌61.11% 换帅+5G能助其脱困吗?

酷派复牌暴跌61.11%

7月19日,酷派集团复牌,开盘价为0.28港元,暴跌61.11%。昨
WeWork有望年底上市 创始人(mm)套(gg)现7亿美元

WeWork有望年底上市

共享办公空间WeWork的母公司We Company拟计划在7月31
直击|王怀南加入电子烟Juul?回应:未在其他公司任职

直击|王怀南加入电子

据蓝洞新消费报道,据称目前进入到最后环节的中国区CEO
哈啰出行公布单车回收进展:处理车轮超50万条

哈啰出行公布单车回收

哈啰出行宣布,截止2019年6月,哈啰出行已回收再生处理车
直击|独立运营1年后 印象笔记CEO唐毅透露发展小目标

直击|独立运营1年后

印象笔记CEO唐毅发表演讲称,“独立后这一年,我瘦了一点,
宝马牵手腾讯在华设云计算中心 将开发自动驾驶技术

宝马牵手腾讯在华设云

据路透社报道,德国汽车制造商宝马和中国在线游戏巨头腾
最新文章
Javascript读写cookie的实例源码

Javascript读写cookie

今天小编就为大家分享一篇关于Javascript读写cookie的
微信小程序登录session的使用

微信小程序登录sessio

这篇文章主要介绍了微信小程序登录session的使用,小编
JavaScript中this用法学习笔记

JavaScript中this用法

在本篇文章里小编给大家分享了关于JavaScript中this用
nodejs微信开发之授权登录+获取用户信息

nodejs微信开发之授权

这篇文章主要介绍了nodejs微信开发之授权登录+获取用
nodejs微信开发之自动回复的实现

nodejs微信开发之自动

这篇文章主要介绍了nodejs微信开发之自动回复的实现,文
node微信开发之获取access_token+自定义菜单

node微信开发之获取ac

这篇文章主要介绍了node微信开发之获取access_token+