函数的callee和caller的区别和用处

news/2024/7/11 1:02:13 标签: javascript, es6, 前端

1. callee \ arguements.callee

是什么?

就是一个指针 可以指向函数本身

1.每个函数都存在一个arguements的对象 尔callee存在于arguements
callee是arguements arguements的属性
callee的使用需要在函数内部进行访问

javascript">function fn(){}

dir(fn)

	arguments: null
	caller: null
	length: 0
	name: "fn"
	prototype: {constructor: ƒ}
	[[FunctionLocation]]: VM96:1
	[[Prototype]]: ƒ ()
	[[Scopes]]: Scopes[1]
javascript">	function  add(a) {
        if (a==1) return 1;
        return a*arguments.callee(a-1);
        //此时可以访问到 
        //arguments.callee  就等同于自身函数add
    }

2.caller

是什么?

指向他的执行者

  1. caller属于函数的一个属性
javascript">	function a(){
        console.log(a.caller)
        //此时的a.caller 指向b  因为他在b函数运行
    }
    function b(){
        a()
    }

3.callee用处

1.递归

javascript">	function  add(a) {
        console.log(add.caller)
        if (a==1) return 1;
        return a*add(a-1);
    }
    //如果 你把函数赋值给了 别的变量
	var other=add;
	add=null
	other(2)//将会报错  因为return a*add(a-1);时候  add不再是函数



    function  add(a) {
        console.log(add.caller)
        if (a==1) return 1;
        return a*arguments.callee(a-1);
    }
     //如果 你把函数赋值给了 别的变量
	var other=add;
	add=null
	other(2)//正常  因为return a*arguments.callee(a-1);
	//时候  arguments.callee将会指向other
    
    
    let a=(function as() {
        if (a==1) return 1;
        return a*as(a-1);
    })
    //因为严格模式 不支持arguement  所以可以用以上的方式替代 完成递归

http://www.niftyadmin.cn/n/724088.html

相关文章

Houdini 快速点云连线以及避免重采样的技巧

今天和挪威的同事讨论点云的vex函数pcunshaded(),结果两个人都没搞太明白倒是转到了另一个话题,就是点云采样制作连线怎样避免重复计算,这里做一下记录。 如果采用严格的避免重复连接的方法,我们可以在每个点上增加两个点属性&…

js函数创建和执行中作用域链都进行那些操作

1. 函数创建和执行的的流程 //创建函数 function compare(){} //执行函数 compare()1.创建函数 function compare(){} 1.1在创建 compare()函数时,会创建一个预先包含全局变量对象的作用域链, //函数内部存在一个 属性--[全局变量对象] 1.2这个作用域链…

自动更新补丁脚本

网上找了一些自动更新补丁脚本,但具体应用的时候,多多少少出现一些问题,经过总结,得到以下修改过的脚本,可以在没有加入网域的电脑中,通过共享文件夹的方式自动更新补丁。注意事项:1.&#xff0…

iOS开发之oc(对于前面的补充2)--xxx

野指针, 强、弱指针 循环引用 释放池转载于:https://www.cnblogs.com/iOSteemo/p/4301465.html

vue中使用for循环生成img但是src 无效的问题 解决 require

1. 使用情况一:直接把src的值写在img中 代码样式 <ul><li ><img :src"./src/img/1.jpg" alt"">//按照你图片存放的路径</li> </ul>这样写完全没有问题 他会找到图片并进行显示 2. 使用情况二:把vue中data的src的值写在im…

CSS权威专家为您解读CSS优先级

CSS权威专家为您解读CSS优先级 转载请注明出处&#xff0c;css探索之旅-飘零雾雨的庄园 在讲CSS优先级之前&#xff0c;我们得要了解什么是CSS&#xff0c;CSS是用来做什么的。 首先&#xff0c;我们对CSS作一个简单的说明&#xff1a;CSS是层叠样式表&#xff08;Cascading S…

Dynamic CRM 2013学习笔记(三十八)流程1 - 操作(action)开发与配置详解

CRM 2013 里流程有4个类别&#xff1a;操作&#xff08;action&#xff09;、业务流程&#xff08;business process flow&#xff09;、对话&#xff08;dialog&#xff09;和工作流&#xff08;workflow&#xff09;。它们都是从 setting –> Process 进入&#xff0c;然后…

web developer tips (35):为js文件中的脚本库添加智能提示

原文地址&#xff1a;How to add Intellisense from script libraries for JS files 这是个示例&#xff0c;在vs2008里为js文件添加智能提示。 有两个js文件: Jscript1.js 包含如下代码&#xff1a; function validateForm() { } Jscript1.js&#xff08;在里面你想当前jsc…