javascript中callee與caller的區(qū)別分析
callee
callee是對(duì)象的一個(gè)屬性,該屬性是一個(gè)指針,指向參數(shù)arguments對(duì)象的函數(shù)
首先我們來寫個(gè)階成函數(shù):
function chen(x){ if (x<=1) { return 1; } else{ return x*chen(x-1); }; };
從這個(gè)函數(shù)中可以看出來,用到了遞歸函數(shù),要是改變了函數(shù)名,里面的函數(shù)名也要隨著改變,這樣很不方便所以我們用callee來試試
function chen(x){ if (x<=1) {return 1; }else{ return x*arguments.callee(x-1); }; };
我們來分析一下為什么這樣寫:根據(jù)callee的定義,可以看出來callee是arguments對(duì)象的一個(gè)屬性,指向arguments對(duì)象的函數(shù),這個(gè)函數(shù)就是chen(chen=arguments.callee),這樣解釋應(yīng)該可以理解了吧。
caller
caller是函數(shù)對(duì)象的一個(gè)屬性,該屬性保存著調(diào)用當(dāng)前函數(shù)的函數(shù)的引用(指向當(dāng)前函數(shù)的直接父函數(shù))
先來個(gè)例子吧
function a(){ b(); }; function b(){ alert(b.caller); }; a(); //結(jié)果就是彈出函數(shù)a和內(nèi)容
我們來解釋一下吧,首先函數(shù)b的屬性caller調(diào)用當(dāng)前函數(shù)b的函數(shù)引用a(就是指向當(dāng)前函數(shù)b的父函數(shù)a),所以結(jié)果就是彈出 function a(){ b();};
那么了解了caller和callee,那么可以不可以將二者結(jié)合在一起來使用呢
function b(){ alert(b.caller); };
從這個(gè)代碼可以看出b函數(shù)中調(diào)用了b函數(shù)名,這樣當(dāng)函數(shù)名改變時(shí)就很不方便,我們需要替換里面的那個(gè)b
前面我們知道用什么方法可以指向當(dāng)前對(duì)象,下面我們就來修改一下:
(function a(){ b(); })(); function b(){ alert(arguments.callee.caller); };
從代碼中可以看出我們用arguments.callee代替了b函數(shù),所以解決了一下麻煩。。。。。
以上所述就是本文的全部?jī)?nèi)容了,希望大家能夠喜歡。
- js apply/call/caller/callee/bind使用方法與區(qū)別分析
- javascript下arguments,caller,callee,call,apply示例及理解
- js中arguments,caller,callee,apply的用法小結(jié)
- 理解Javascript的caller,callee,call,apply區(qū)別
- Javascript - 全面理解 caller,callee,call,apply
- 理解JavaScript的caller,callee,call,apply
- JavaScript中的apply()方法和call()方法使用介紹
- js中繼承的幾種用法總結(jié)(apply,call,prototype)
- 詳解js中的apply與call的用法
- javascript中apply和call方法的作用及區(qū)別說明
- javascript中callee與caller的用法和應(yīng)用場(chǎng)景
- javascript中call,apply,callee,caller用法實(shí)例分析
相關(guān)文章
JavaScript詳解類數(shù)組與可迭代對(duì)象的實(shí)現(xiàn)原理
這篇文章主要介紹了JavaScript詳解類數(shù)組與可迭代對(duì)象的實(shí)現(xiàn)原理,ES6中引入了迭代器與可迭代對(duì)象的概念,并且提供了對(duì)可迭代對(duì)象的相關(guān)支持,如for...of循環(huán),Map(iterable)構(gòu)造器,展開語法...等。讓我們對(duì)數(shù)組外的數(shù)據(jù)集合的遍歷操作也得到極大簡(jiǎn)化2022-06-06原生JS實(shí)現(xiàn)垂直手風(fēng)琴效果
本篇文章主要介紹了原生JS實(shí)現(xiàn)垂直手風(fēng)琴效果的示例代碼,具有很好的參考價(jià)值,下面跟著小編一起來看下吧2017-02-02JavaScript基礎(chǔ)進(jìn)階之?dāng)?shù)組方法總結(jié)(推薦)
下面小編就為大家?guī)硪黄狫avaScript基礎(chǔ)進(jìn)階之?dāng)?shù)組方法總結(jié)(推薦)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-09-09JS小球拋物線軌跡運(yùn)動(dòng)的兩種實(shí)現(xiàn)方法詳解
這篇文章主要介紹了JS小球拋物線軌跡運(yùn)動(dòng)的兩種實(shí)現(xiàn)方法,結(jié)合實(shí)例形式分析了javascript實(shí)現(xiàn)小球拋物線運(yùn)動(dòng)的相關(guān)計(jì)算與圖形繪制操作技巧,需要的朋友可以參考下2017-12-12es6函數(shù)name屬性功能與用法實(shí)例分析
這篇文章主要介紹了es6函數(shù)name屬性,結(jié)合實(shí)例形式分析了es6函數(shù)name屬性基本原理、功能、用法及操作注意事項(xiàng),需要的朋友可以參考下2020-04-04layui.use模塊外部使用其內(nèi)部定義的js封裝函數(shù)方法
今天小編就為大家分享一篇layui.use模塊外部使用其內(nèi)部定義的js封裝函數(shù)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-09-09BootStrap Typeahead自動(dòng)補(bǔ)全插件實(shí)例代碼
本文給大家介紹BootStrap Typeahead自動(dòng)補(bǔ)全插件的實(shí)例代碼,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下2016-08-08