基本理解:

你怎么看待一个函数呢?又如何看待一个函数对象呢?函数和Function之间的关系到底是什么?我觉得理解这些对理解arguments.callee有所帮助。

先说说auguments.callee是什么:它是一个指针,它指向当前函数,这个函数没有当前的参数环境,是一个纯净的Function实例,就好比一个厕所,对象只是去厕所撒尿,撒完尿它会出来,厕所还是厕所

案例说明:

网上找到一个例子,可以很好说明它的用途,怎么看耦合性高低,假如我这样调用 let copy = factorial;    factorial = null;    copy(3);  一般写法结果是错误的,而升级写法是正确的。使用它还有一个作用,可以直接从函数中获取原型对象。

//一般的写法,缺点耦合性高(红色部分)
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);
}
}

你学到东西了,记得点赞告诉我。

我对arguments.callee的理解的更多相关文章

  1. 理解JavaScript中的arguments,callee,caller,apply

    arguments 该对象代表正在执行的函数和调用它的函数的参数. [function.]arguments[n] 参数function :选项.当前正在执行的 Function 对象的名字. n : ...

  2. arguments,caller,callee之理解

    arguments对象代表正在执行的函数和调用它的函数的参数,arguments是一个不是数组但类似 数组的对象,它具有同数组一样的访问性质及方式,可以由arguments[n]来访问对应单个参数的值 ...

  3. 深入理解arguments.callee

    在函数内部,有两个特殊的对象:arguments 和 this.其中, arguments 的主要用途是保存函数参数, 但这个对象还有一个名叫 callee 的属性,该属性是一个指针,指向拥有这个 a ...

  4. 搞清arguments,callee,caller

    arguments是什么? arguments是函数调用时,创建的一个类似的数组但又不是数组的对象,并且它存储的是实际传递给函数的参数,并不局限于函数声明的参数列表哦. 尼玛,什么意思? 写个demo ...

  5. JavaScript函数之实际参数对象(arguments) / callee属性 / caller属性 / 递归调用 / 获取函数名称的方法

    函数的作用域:调用对象 JavaScript中函数的主体是在局部作用域中执行的,该作用域不同于全局作用域.这个新的作用域是通过将调用对象添加到作用域链的头部而创建的(没怎么理解这句话,有理解的亲可以留 ...

  6. as3 arguments.callee与... (rest)

    import flash.display.Sprite; var count:int = 1; ArgumentsExample() function ArgumentsExample() { fir ...

  7. js 函数递归优化,arguments.callee 优化

    函数递归是个经典的问题,平常用的时候,小练习可以通过函数名来反复调用,比如: function factorial(num) { if (num <= 1) { return 1; } else ...

  8. 在js中arguments对象的理解

    一.在函数调用的时候,浏览器每次都会传递进两个隐式参数 函数的上下文对象this 封装实参的对象arguments 二.arguments 对象 arguments 对象实际上是所在函数的一个内置类数 ...

  9. 引用类型--Function类型(函数声明与函数表达式、arguments.callee、caller、apply、call、bind)

    在ECMAScript中函数实际上是对象.每个函数都是Function类型的实例,而且都与其他引用类型一样具有属性和方法.由于函数是对象,因此函数名实际上也是一个指向函数对象的指针,不会与某个函数绑定 ...

随机推荐

  1. awvas启动不起来解决方案

    当双击桌面的"Acunetix图标",自动打开浏览器跳转页面,结果页面显示"无法访问此网站"按Windows+R键输入services.msc打开服务界面查看A ...

  2. 记一次腾讯云服务器centos linux可视化桌面安装并进行远程桌面登录及其安装中文包

    开始前请确保你有能上网的主机两部(一个是CentOS7系统,一个是Windows10系统)1.用SSH root用户登录Centos主机:2.检查你的centos是否装了epel库 执行命令:rpm ...

  3. 使用ensp模拟器中的防火墙(USG6000V)配置NAT(网页版)

    使用ensp模拟器中的防火墙(USG6000V)配置NAT(网页版)一.NAT介绍NAT(Network Address Translation,网络地址转换):简单来说就是将内部私有地址转换成公网地 ...

  4. [题解]Codeforces Round #254 (Div. 2) A - DZY Loves Chessboard

    链接:http://codeforces.com/contest/445/problem/A 描述:一个n*m的棋盘,有一些格子不能放棋子.现在把黑白棋子往上放,要求放满且相邻格子的棋子颜色不同.输出 ...

  5. C#编程学习(一)

    1.1 开始在Visual Studio 2013环境中编程 控制台应用程序是在命令提示符窗口而非图形用户界面(GUI)中运行的应用程序. 集成开发环境(Integrated Development  ...

  6. 网络中delay和latency的区别

    时序分析基本概念是Latency, 时钟传播延迟.主要指从Clock源到时序组件Clock输入端的延迟时间.它可以分为两个部分:时钟源插入延迟(source latency)和时钟网络延迟(netwo ...

  7. 使用lrzsz在windows、Linux之间互传文件

    使用xshell自带的传输太慢 使用lrzsz进行文件互传: xshell远程linux 安装工具:yum install -y lrzsz,检查是否安装成功:rpm -qa |grep lrzsz ...

  8. Centos Linux下载rpm软件包(基础环境篇)-从零到无

    --时间:2020年10月23日 --作者:飞翔的小胖猪 一.概述 1.1  前言 很多生产环境往往是独立的一张网络不与互联网相通,经常会出现的问题就是应用在部署的时候无法安装配套的依赖包.导致很简单 ...

  9. Python:读取txt中按列分布的数据,并将结果保存在Excel文件中 && 保存每一行的元素为list

    import xlwt import os def write_excel(words,filename): #写入Excel的函数,words是数据,filename是文件名 wb=xlwt.Wor ...

  10. Python:在cmd中使用pip安装第三方库时出现SyntaxError

    原因:pip安装库时不需要进入Python环境,在Python环境下安装就会出现SyntaxError 解决方法:输入exit(),退出Python环境,然后就可以pip安装了