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

DDD
リリース: 2024-11-12 10:17:02
オリジナル
559 人が閲覧しました

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート