宝哥软件园

JavaScript中被调用者和调用者的区别及用法实例分析

编辑:宝哥软件园 来源:互联网 时间:2021-08-22

本文说明了JavaScript中被调用方和调用方的区别和用法。分享给大家参考,如下:

1 .被呼叫者

在函数内部,有两个特殊的对象:参数和这个。其中,arguments是一个类似数组的对象,它包含传递给函数的所有参数。

虽然参数的主要目的是保存函数参数,但是这个对象有一个属性——callee,它是指向拥有这个参数对象的函数的指针

所以被调用者的角色是指向当前对象

看一个分层函数的例子,你就会明白它的用途:

/* *普通递归层次函数*/函数阶乘(num){ if(num=1){ return 1;} else { return num *阶乘(num-1);}}上面的代码运行没有问题,但是这个函数的执行与函数名factorial紧密耦合。如果函数名改变了,里面的函数名也会改变,非常不方便,所以我们用arguments.callee来消除这种耦合。

//使用递归层次函数函数阶乘1(num){ if(num=1){ return 1;} else { return num * arguments . calleeper(num-1);}}根据被调用者的定义,被调用者是arguments对象的一个属性,指向带有arguments对象的函数。这个函数是阶乘1(阶乘1=arguments.callee),它们都指向上面的递归函数。请记住,函数的名称只是一个包含指针的变量。

2 .呼叫者

调用者是一个函数对象的属性,它包含对调用当前函数的函数的引用(指向当前函数的直接父函数)

返回对调用当前函数的函数的引用。

函数a(){//父函数b();};函数b(){ console . info(b . caller);};(a );//结果,函数a和内容弹出。可以看到函数b的属性调用者调用当前函数b的函数引用a(即指向当前函数b的父函数a)

3.组合被叫方和主叫方

函数b(){ alert(b . caller);};从这段代码可以看出,B函数中调用的是B函数名,所以当函数名发生变化时非常不方便,我们需要替换里面的B

之前,我们知道如何指向当前对象,所以让我们修改它:

(函数a(){ b();})();函数b(){ alert(arguments . caller . caller);//b}被参数替换。被调用方;

4.例子:斐波那契数列(带递归思想)

如果一对兔子每个月生一对兔子;一对新生兔子从第二个月开始生兔子;假设每对兔子是雌兔和雄兔,第n个月一对兔子能繁殖多少对兔子?(与被叫方完成)

var结果=[];函数fn(n){ if(n==1){ return 1;} else if(n==2){ return 1;} else { if(result[n]){ return result[n];} else {//arguments . calleeper(.)=fn(.)结果[n]=arguments . calleer(n-1)arguments . calleer(n-2);返回结果[n];}}}感兴趣的朋友可以使用网上的HTML/CSS/JavaScript代码运行工具:http://tools.jb51.net/code/HtmlJsRun来测试一下上面的代码运行效果。

有关JavaScript的更多信息,请参见本网站的主题:《JavaScript常用函数技巧汇总》、《javascript面向对象入门教程》、《JavaScript查找算法技巧总结》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript数学运算用法总结》和0103010。

希望本文对JavaScript编程有所帮助。

更多资讯
游戏推荐
更多+