javascript_javascript スキルにおける呼び出し先と呼び出し元の違いの分析

WBOY
リリース: 2016-05-16 16:03:13
オリジナル
1119 人が閲覧しました

呼び出し先

callee はオブジェクトの属性であり、引数オブジェクト
の関数を指すポインタです。 まず、順序関数を作成しましょう:

function chen(x){
if (x<=1) {
return 1;
} else{
return x*chen(x-1);
};
};
ログイン後にコピー

この関数は再帰関数を使っているので関数名を変更すると内部の関数名も変わってしまうので非常に不便なのでcalleeを使って試してみます。

function chen(x){
if (x<=1) {return 1;
}else{
return x*arguments.callee(x-1);
};
};
ログイン後にコピー
なぜこのように書かれているのかを分析してみましょう: callee の定義によれば、callee は argument オブジェクトの属性であり、arguments オブジェクトの関数を指していることがわかります。この関数は chen (chen=arguments. .callee) この説明は理解できるはずです。

発信者

caller は関数オブジェクトの属性であり、現在の関数を呼び出す関数への参照を保持します (現在の関数の直接の親関数を指します)

まず例を見てみましょう


function a(){
b();
};
function b(){
alert(b.caller);
};
a(); //结果就是弹出函数a和内容
ログイン後にコピー
まず、関数 b の属性呼び出し元が現在の関数 b の関数参照 a (現在の関数 b の親関数 a を指す) を呼び出すので、結果は関数 a(){ になります。 b();}; が表示されます。

呼び出し元と呼び出し先を理解したところで、この 2 つを組み合わせて使用​​できますか?


function b(){
alert(b.caller);
};
ログイン後にコピー
このコードから、b 関数名が b 関数内で呼び出されていることがわかります。これは、関数名を変更するときに、b
を置き換える必要があることがわかります。 現在のオブジェクトを指す方法はすでにわかっているので、次にそれを変更しましょう:



(function a(){
b();
})();

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

ログイン後にコピー
コードからわかるように、b 関数を argument.callee に置き換えたので、問題は解決されました。 。 。 。 。

以上がこの記事の全内容です。皆さんに気に入っていただければ幸いです。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!