国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

javascript中callee與caller的區(qū)別分析

2019-11-20 12:38:09
字體:
供稿:網(wǎng)友

callee

callee是對象的一個屬性,該屬性是一個指針,指向參數(shù)arguments對象的函數(shù)
首先我們來寫個階成函數(shù):

function chen(x){if (x<=1) {return 1;} else{return x*chen(x-1);};};

從這個函數(shù)中可以看出來,用到了遞歸函數(shù),要是改變了函數(shù)名,里面的函數(shù)名也要隨著改變,這樣很不方便所以我們用callee來試試

function chen(x){if (x<=1) {return 1;}else{return x*arguments.callee(x-1);};};

我們來分析一下為什么這樣寫:根據(jù)callee的定義,可以看出來callee是arguments對象的一個屬性,指向arguments對象的函數(shù),這個函數(shù)就是chen(chen=arguments.callee),這樣解釋應(yīng)該可以理解了吧。

caller

caller是函數(shù)對象的一個屬性,該屬性保存著調(diào)用當(dāng)前函數(shù)的函數(shù)的引用(指向當(dāng)前函數(shù)的直接父函數(shù))

先來個例子吧

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);};

從這個代碼可以看出b函數(shù)中調(diào)用了b函數(shù)名,這樣當(dāng)函數(shù)名改變時(shí)就很不方便,我們需要替換里面的那個b
前面我們知道用什么方法可以指向當(dāng)前對象,下面我們就來修改一下:

(function a(){b();})();function b(){alert(arguments.callee.caller);};

從代碼中可以看出我們用arguments.callee代替了b函數(shù),所以解決了一下麻煩。。。。。

以上所述就是本文的全部內(nèi)容了,希望大家能夠喜歡。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 新密市| 汉沽区| 青冈县| 崇阳县| 佛山市| 七台河市| 双柏县| 茌平县| 文山县| 福安市| 乌拉特中旗| 北票市| 洪湖市| 什邡市| 烟台市| 长治县| 平舆县| 车险| 双柏县| 辉县市| 宿迁市| 临潭县| 格尔木市| 盐津县| 九台市| 赤城县| 应城市| 大荔县| 和平区| 沙湾县| 花莲县| 彩票| 屯留县| 宜宾县| 汉寿县| 天津市| 萝北县| 蛟河市| 二连浩特市| 嘉义县| 阿克陶县|