JS函数内部属性之arguments和this实例解析


Posted in Javascript onOctober 07, 2018

在函数内部,有两个特殊的对象: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实例解析,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

Javascript 相关文章推荐
模仿百度三维地图的js数据分享
May 12 Javascript
自己编写的类似JS的trim方法
Oct 09 Javascript
js模拟点击以提交表单为例兼容主流浏览器
Nov 29 Javascript
javascript实现依次输入input自动定焦
Dec 23 Javascript
jQuery中prop()方法用法实例
Jan 05 Javascript
JavaScript给url网址进行encode编码的方法
Mar 18 Javascript
js实现数组冒泡排序、快速排序原理
Mar 08 Javascript
javascript之Array 数组对象详解
Jun 07 Javascript
Bootstrap3.3.7导航栏下拉菜单鼠标滑过展开效果
Oct 31 Javascript
浅析Node.js非对称加密方法
Jan 29 Javascript
基于Vue实现可以拖拽的树形表格实例详解
Oct 18 Javascript
详解JS ES6编码规范
May 07 Javascript
JS如何获取地址栏的参数实例讲解
Oct 06 #Javascript
详谈js的变量提升以及使用方法
Oct 06 #Javascript
浅析js中mvvm模式实现的原理
Oct 06 #Javascript
js for终止循环 跳出多层循环
Oct 04 #Javascript
iView-admin 动态路由问题的解决方法
Oct 03 #Javascript
Angular resolve基础用法详解
Oct 03 #Javascript
解决angularjs service中依赖注入$scope报错的问题
Oct 02 #Javascript
You might like
php下图片文字混合水印与缩略图实现代码
2009/12/11 PHP
PHP关于IE下的iframe跨域导致session丢失问题解决方法
2013/10/10 PHP
thinkphp连贯操作实例分析
2014/11/22 PHP
用js实现上传图片前的预览(TX的面试题)
2007/08/14 Javascript
javascript实现面向对象类的功能书写技巧
2010/03/07 Javascript
JavaScript对象创建及继承原理实例解剖
2013/02/28 Javascript
javascript每日必学之基础入门
2016/02/16 Javascript
jquery结合html实现中英文页面切换
2016/11/29 Javascript
JS瀑布流实现方法实例分析
2016/12/19 Javascript
bootstrap——bootstrapTable实现隐藏列的示例
2017/01/14 Javascript
vue指令以及dom操作详解
2017/03/04 Javascript
vue写一个组件
2018/04/09 Javascript
使用Angular9和TypeScript开发RPG游戏的方法
2020/03/25 Javascript
详解Vue3中对VDOM的改进
2020/04/23 Javascript
详解Vue之计算属性
2020/06/20 Javascript
Python中实现两个字典(dict)合并的方法
2014/09/23 Python
Python读写文件方法总结
2015/06/09 Python
Python实现的RSS阅读器实例
2015/07/25 Python
python下解压缩zip文件并删除文件的实例
2018/04/24 Python
Python 数据库操作 SQLAlchemy的示例代码
2019/02/18 Python
python爬虫实现中英翻译词典
2019/06/25 Python
python覆盖写入,追加写入的实例
2019/06/26 Python
只要五步 就可以用HTML5/CSS3快速制作便签贴特效(图)
2012/06/04 HTML / CSS
施华洛世奇匈牙利官网:SWAROVSKI匈牙利
2019/07/06 全球购物
.NET笔试题(20个问题)
2016/02/02 面试题
EJB与JAVA BEAN的区别
2016/08/29 面试题
银行会计职员个人的自我评价
2013/09/29 职场文书
先进个人获奖感言
2014/01/24 职场文书
公司股权转让协议书
2014/04/12 职场文书
图书馆志愿者活动总结
2014/06/27 职场文书
四查四看整改措施
2014/09/19 职场文书
小鞋子观后感
2015/06/05 职场文书
2015年秋季运动会加油稿
2015/07/22 职场文书
吧主申请感言怎么写
2015/08/03 职场文书
62句有关感恩节文案(推荐收藏)
2019/11/28 职场文书
python文件与路径操作神器 pathlib
2022/04/01 Python