我是靠谱客的博主 高兴百褶裙,最近开发中收集的这篇文章主要介绍函数的callee和caller的区别和用处1. callee \ arguements.callee2.caller,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1. callee arguements.callee

是什么?

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

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

function fn(){}

dir(fn)

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

2.caller

是什么?

指向他的执行者

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

3.callee用处

1.递归

	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  所以可以用以上的方式替代 完成递归

最后

以上就是高兴百褶裙为你收集整理的函数的callee和caller的区别和用处1. callee \ arguements.callee2.caller的全部内容,希望文章能够帮你解决函数的callee和caller的区别和用处1. callee \ arguements.callee2.caller所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(46)

评论列表共有 0 条评论

立即
投稿
返回
顶部