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,超强推荐base.js
Dec 23 Javascript
JavaScript 事件系统
Jul 22 Javascript
Extjs中ComboBoxTree实现的下拉框树效果(自写)
May 28 Javascript
JavaScript中的prototype.bind()方法介绍
Apr 04 Javascript
javascript实现的平方米、亩、公顷单位换算小程序
Aug 11 Javascript
jQuery中change事件用法实例
Dec 26 Javascript
JavaScript获取客户端IP的方法(新方法)
Mar 11 Javascript
jquery跟随屏幕滚动效果的实现代码
Apr 13 Javascript
微信分享调用jssdk实例
Jun 08 Javascript
JavaScript去掉数组重复项的方法分析【测试可用】
Jul 19 Javascript
JavaScript两种计时器的实例讲解
Jan 31 Javascript
JS面向对象编程实现的拖拽功能案例详解
Mar 03 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/06/03 PHP
PHP获取网页标题的3种实现方法代码实例
2014/04/11 PHP
PHP中的替代语法简介
2014/08/22 PHP
PHP中使用GD库绘制折线图 折线统计图的绘制方法
2015/11/09 PHP
javascript中的变量作用域以及变量提升详细介绍
2013/10/24 Javascript
自写的jQuery异步加载数据添加事件
2014/05/15 Javascript
jquery zTree异步加载简单实例讲解
2016/02/25 Javascript
详解AngularJS跨页面传值(ui-router)
2017/08/23 Javascript
Express进阶之log4js实用入门指南
2018/02/10 Javascript
vue页面离开后执行函数的实例
2018/03/13 Javascript
ES6数组与对象的解构赋值详解
2019/06/14 Javascript
Vue解析剪切板图片并实现发送功能
2020/02/04 Javascript
[03:37]2014DOTA2国际邀请赛 主赛事第一日胜者组TOPPLAY
2014/07/19 DOTA
Python之父谈Python的未来形式
2016/07/01 Python
python3.0 模拟用户登录,三次错误锁定的实例
2017/11/02 Python
tornado 多进程模式解析
2018/01/15 Python
Python断言assert的用法代码解析
2018/02/03 Python
python pandas修改列属性的方法详解
2018/06/09 Python
python计算列表内各元素的个数实例
2018/06/29 Python
pandas数据筛选和csv操作的实现方法
2019/07/02 Python
Django model 中设置联合约束和联合索引的方法
2019/08/06 Python
python 回溯法模板详解
2020/02/26 Python
pyqt5中动画的使用详解
2020/04/01 Python
Python求凸包及多边形面积教程
2020/04/12 Python
使用html5新特性轻松监听任何App自带返回键的示例
2018/03/13 HTML / CSS
Topshop美国官网:英国快速时尚品牌
2019/05/16 全球购物
在校生钳工实习自我鉴定
2013/09/19 职场文书
旅游管理毕业生自荐书
2014/02/02 职场文书
毕业实习评语
2014/02/10 职场文书
《月光启蒙》教学反思
2014/03/01 职场文书
学生党员的自我评价范文
2014/03/01 职场文书
农村婚庆司仪主持词
2014/03/15 职场文书
2014年国庆节寄语
2014/09/19 职场文书
基层党员群众路线整改措施及努力方向
2014/10/28 职场文书
公司市场部岗位职责
2015/04/15 职场文书
JS实现简单的九宫格抽奖
2022/06/28 Javascript