博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaScript函数内部属性arguments
阅读量:6164 次
发布时间:2019-06-21

本文共 1195 字,大约阅读时间需要 3 分钟。

hot3.png

JavaScript高级程序设计(第三版),个人的读书笔记.

在JS函数内部,有两个特殊的对象:arguments和this,我们先讲下arguments。

arguments是一类数组对象,包含着输入函数中的所有参数。除此之外还有一个callee的属性,该属性是一个指针,指向拥有这个arguments对象的函数。

举一个阶乘的例子文件命名为factorial.js(在nodejs下检验js输出结果):

function factorial(num) {	if(num <= 1) {		return 1;	}else{		return num * factorial(num - 1);	}}//同样效果的:function factorial(num) {	if(num <= 1) {		return 1;	}else{		return num * arguments.callee(num-1);	}}

这种写法主要为了函数的解耦,重写的函数,无论引用函数时使用的是什么名字,都可以保证正常的完成递归调用。

看下面两段代码的执行结果:

//第一段代码function factorial(num) {	if(num <= 1) {		return 1;	}else{		return num * factorial(num - 1);	}}var trueFactorial = factorial;factorial = function() {	return 0;}console.log(trueFactorial(5));console.log(factorial(5));//运行结果是//0//0
变量trueFactorial获取了factorial值,实际上实在另一个位置上保存了一个函数的指针,然后我们又将简单的返回0的函数复制给factorial变量.所以在trueFactorial执行时,内部的factorial已经是被重写了.所以输出0 0结果~
//第二段代码function factorial(num) {	if(num <= 1) {		return 1;	}else{		return num * arguments.callee(num-1);	}}var trueFactorial = factorial;factorial = function() {	return 0;}console.log(trueFactorial(5));console.log(factorial(5));//运行结果是://120//0

函数只是会调用自身,后面的变量复制的函数不会去覆盖掉factorial的中的调用,所以运行结果是我们想要的.

转载于:https://my.oschina.net/alexskywinner/blog/224076

你可能感兴趣的文章
thead 固定,tbody 超出滚动(附带改变滚动条样式)
查看>>
Dijkstra算法
查看>>
css 动画 和 响应式布局和兼容性
查看>>
csrf 跨站请求伪造相关以及django的中间件
查看>>
MySQL数据类型--与MySQL零距离接触2-11MySQL自动编号
查看>>
生日小助手源码运行的步骤
查看>>
Configuration python CGI in XAMPP in win-7
查看>>
bzoj 5006(洛谷 4547) [THUWC2017]Bipartite 随机二分图——期望DP
查看>>
CF 888E Maximum Subsequence——折半搜索
查看>>
欧几里德算法(辗转相除法)
查看>>
面试题1-----SVM和LR的异同
查看>>
MFC控件的SubclassDlgItem
查看>>
如何避免历史回退到登录页面
查看>>
《图解HTTP》1~53Page Web网络基础 HTTP协议 HTTP报文内的HTTP信息
查看>>
unix环境高级编程-高级IO(2)
查看>>
树莓派是如何免疫 Meltdown 和 Spectre 漏洞的
查看>>
雅虎瓦片地图切片问题
查看>>
HTML 邮件链接,超链接发邮件
查看>>
HDU 5524:Subtrees
查看>>
手机端userAgent
查看>>