この記事は編集レビューを必要としています。ぜひご協力ください。
メッセージ
Warning: ReferenceError: deprecated caller usage (Firefox) Warning: ReferenceError: deprecated arguments usage (Firefox) TypeError: 'callee' and 'caller' cannot be accessed in strict mode. (Safari)
エラータイプ
strict モードでのみ、ReferenceError
の警告が発生します。JavaScript の実行は、停止しません。
何がうまくいかなかったのか?
strict モード で、Function.caller
か Function.arguments
が使われていますが、それらは使用すべきではありません。なぜならば、それらは関数の呼び出し元をリークし、非標準で、最適化が困難、かつ性能に対して有害な機能のため、非推奨です。
例
非推奨の function.caller
か arguments.callee.caller
Function.caller
と arguments.callee.caller
は非推奨です(詳細は参照記事を見てください)。
"use strict"; function myFunc() { if (myFunc.caller == null) { return 'The function was called from the top!'; } else { return 'This function\'s caller was ' + myFunc.caller; } } myFunc(); // Warning: ReferenceError: deprecated caller usage // "The function was called from the top!"
Function.arguments
Function.arguments
は非推奨です(詳細は参照記事を見てください)。
"use strict"; function f(n) { g(n - 1); } function g(n) { console.log('before: ' + g.arguments[0]); if (n > 0) { f(n); } console.log('after: ' + g.arguments[0]); } f(2); console.log('returned: ' + g.arguments); // Warning: ReferenceError: deprecated arguments usage