亚洲精品中文字幕无乱码_久久亚洲精品无码AV大片_最新国产免费Av网址_国产精品3级片

JavaScript

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

時(shí)間:2024-07-31 11:07:46 JavaScript 我要投稿
  • 相關(guān)推薦

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

  callee

  callee是對(duì)象的一個(gè)屬性,該屬性是一個(gè)指針,指向參數(shù)arguments對(duì)象的函數(shù)

  首先我們來(lái)寫個(gè)階成函數(shù):

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

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

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

  我們來(lái)分析一下為什么這樣寫:根據(jù)callee的定義,可以看出來(lái)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ù))

  先來(lái)個(gè)例子吧

  function a(){b();};function b(){alert(b.caller);};a(); //結(jié)果就是彈出函數(shù)a和內(nèi)容

  我們來(lá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é)合在一起來(lái)使用呢

  function b(){alert(b.caller);};

  從這個(gè)代碼可以看出b函數(shù)中調(diào)用了b函數(shù)名,這樣當(dāng)函數(shù)名改變時(shí)就很不方便,我們需要替換里面的那個(gè)b

  前面我們知道用什么方法可以指向當(dāng)前對(duì)象,下面我們就來(lái)修改一下:

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

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

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

【javascript中callee與caller的區(qū)別】相關(guān)文章:

如何調(diào)試javascript腳本呢07-19

javascript跨域訪問(wèn)的方法07-19

CFR與CIF的含義與區(qū)別01-14

戲劇和話劇的區(qū)別12-20

打工和創(chuàng)業(yè)的區(qū)別02-13

新聞寫作與公文寫作的區(qū)別01-10

托福和gre、雅思的區(qū)別07-24

銷售管理與營(yíng)銷管理的區(qū)別01-25

潛水服與沖浪服的區(qū)別03-15

拳擊、自由搏擊與MMA的區(qū)別07-25