ホームページ  >  記事  >  ウェブフロントエンド  >  `arguments.callee.caller` が JavaScript で非推奨になったのはなぜですか?

`arguments.callee.caller` が JavaScript で非推奨になったのはなぜですか?

DDD
DDDオリジナル
2024-11-12 10:17:02509ブラウズ

Why Was `arguments.callee.caller` Deprecated in JavaScript?

Arguments.callee.caller プロパティが JavaScript で非推奨になった理由

JavaScript では、arguments.callee.caller が導入されましたが、その後非推奨になりました。ただし、一部のブラウザではまだサポートされていますが、完全に省略されているブラウザもあります。疑問が生じます: この一見便利な機能はなぜ放棄されたのでしょうか?

再帰の必要性

JavaScript の初期バージョンでは、名前付き関数式はサポートされていませんでした。このため、再帰関数式の作成が困難になりました。

たとえば、階乗関数を考えてみましょう。

[1,2,3,4,5].map(factorial);

名前付き関数式がないと、このコードは機能しません。 argument.callee プロパティは次の解決策を提供しました:

[1,2,3,4,5].map(function(n) {
     return (!(n>1))? 1 : arguments.callee(n-1)*n;
 });

Arguments.callee の欠点

ただし、arguments.callee にはいくつかの欠点がありました:

  • インライン化や末尾再帰などの最適化を妨げていました。
  • 再帰呼び出し中に this の値を変更していました。

ECMAScript 3 の解決策

ECMAScript 3 では名前付き関数式が導入され、arguments.callee.

例:

[1,2,3,4,5].map(function factorial(n) {
     return (!(n>1))? 1 : factorial(n-1)*n;
 });

このアプローチには、arguments.callee:

に比べていくつかの利点があります。
  • 他の関数と同じように関数を呼び出すことができます。
  • 名前空間を汚染しません。
  • 再帰呼び出し内での整合性が維持されます。
  • 引数オブジェクトへのアクセスのオーバーヘッドを排除することで、パフォーマンスが向上します。

結論

arguments.callee.caller の非推奨は、JavaScript の改善に不可欠でした。最適化機能と、関数呼び出し中の一貫した動作の確保。名前付き関数式は、再帰と呼び出しコンテキストへのアクセスのための、より信頼性が高く効率的な代替手段を提供します。

以上が`arguments.callee.caller` が JavaScript で非推奨になったのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。