setTimeout への文字列の受け渡しは望ましくないという広範なコンセンサスがあるにもかかわらず、これが発生する場合があるかもしれません。練習は楽しいです。ここで疑問が生じます: この規則に違反する正当な理由はありますか?
文字列パラメーターを拒否する従来の理由は、文字列パラメーターがグローバル スコープで実行され、パフォーマンス上の問題と潜在的なセキュリティ脆弱性が発生するためです。最新の構文では、関数を引数として setTimeout に渡すことを優先して、このアプローチを避けています。
setTimeout(function() { doSomething(someVar); }, 10000);
関数または変数がグローバルに存在するが、ローカルでオーバーライドされるシナリオを考えてみましょう。開発者は、非推奨の構文を使用してグローバル インスタンスにアクセスすることを検討する場合があります:
setTimeout('doSomething(someVar)', 10000);
ただし、ウィンドウ オブジェクト (window.globalVar など) を介してグローバル変数にアクセスすると、この例外は必要なくなります。
setTimeout と setInterval での文字列パラメーターの許可は、おそらく歴史的な優先順位によるものです。当初、これらの関数は実行するコードを含む文字列のみを受け入れていました。有効な引数として Function オブジェクトが導入されたのは後でした。文字列パラメーターを遡及的に禁止すると、既存のコードが破損します。
以上がsetTimeout の文字列パラメータの非推奨には例外はありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。