コードをJavaScriptを「厳密」にしようとしているので、コードが準拠していることを確認するためにJSLintを介して実行しています。
ただし、次のコードでは:
setTimeout("getExtJs()", 2000);
次のエラーが表示されます。
暗黙の評価は悪です。文字列の代わりに関数を渡します。
コードをJavaScriptで「厳密」にするにはどうすればよいですか?
コードをJavaScriptを「厳密」にしようとしているので、コードが準拠していることを確認するためにJSLintを介して実行しています。
ただし、次のコードでは:
setTimeout("getExtJs()", 2000);
次のエラーが表示されます。
暗黙の評価は悪です。文字列の代わりに関数を渡します。
コードをJavaScriptで「厳密」にするにはどうすればよいですか?
setTimeout(getExtJs, 2000);
getExtJsの前後に引用符がないことに注意してください。文字列ではなく、関数を渡しています。
編集: コメントに記載されているように、JSLintが動揺する理由は、最初の引数が文字列の場合、eval()と同じ方法で実行されるコードとして処理されるためです。
https://developer.mozilla.org/en/window.setTimeoutを参照してください
eval()(および拡張機能としてここで最初の引数として文字列を使用する)が悪である理由を見つけるには、MozillaDeveloperNetworkのエントリをeval
参照してください。
あなたがそうするならば、それは文句を言うべきではありません:
setTimeout(function(){
// your code of this function getExtJs here
}, 2000);
または:
setTimeout(getExtJs, 2000);
セキュリティ面やその他の点で、実装に問題はありませんが。
それが言うように、関数を渡します(関数名を引用符で囲みません):
setTimeout(getExtJs, 2000);
"getExtJs"
文字列( )を渡すと、setTimeout
最終的には文字列eval
になります。その代わりに、関数自体を単純に渡す方がよいでしょう(getExtJs
)。
setTimeout(function () {getExtJs();}, 2000);
正しい構文は次のとおりです。
setTimeout(getExtJs, 2000);
関数への参照を渡し、2000ms後に関数が実行されます。関数名の後に括弧を付けると、関数を参照する代わりに関数を実行することになります。