4

コードをJavaScriptを「厳密」にしようとしているので、コードが準拠していることを確認するためにJSLintを介して実行しています。

ただし、次のコードでは:

setTimeout("getExtJs()", 2000);

次のエラーが表示されます。

暗黙の評価は悪です。文字列の代わりに関数を渡します。

コードをJavaScriptで「厳密」にするにはどうすればよいですか?

4

5 に答える 5

14
setTimeout(getExtJs, 2000);

getExtJsの前後に引用符がないことに注意してください。文字列ではなく、関数を渡しています。

編集: コメントに記載されているように、JSLintが動揺する理由は、最初の引数が文字列の場合、eval()と同じ方法で実行されるコードとして処理されるためです。

https://developer.mozilla.org/en/window.setTimeoutを参照してください

eval()(および拡張機能としてここで最初の引数として文字列を使用する)が悪である理由を見つけるには、MozillaDeveloperNetworkのエントリをeval参照してください。

于 2010-11-12T18:09:34.440 に答える
3

あなたがそうするならば、それは文句を言うべきではありません:

setTimeout(function(){
  // your code of this function getExtJs here
}, 2000);

または:

setTimeout(getExtJs, 2000);

セキュリティ面やその他の点で、実装に問題はありませんが。

于 2010-11-12T18:09:30.317 に答える
1

それが言うように、関数を渡します(関数名を引用符で囲みません):

setTimeout(getExtJs, 2000);

"getExtJs"文字列( )を渡すと、setTimeout最終的には文字列evalになります。その代わりに、関数自体を単純に渡す方がよいでしょう(getExtJs)。

于 2010-11-12T18:09:40.157 に答える
1
setTimeout(function () {getExtJs();}, 2000);
于 2010-11-12T18:09:45.173 に答える
1

正しい構文は次のとおりです。

setTimeout(getExtJs, 2000);

関数への参照を渡し、2000ms後に関数が実行されます。関数名の後に括弧を付けると、関数を参照する代わりに関数を実行することになります。

于 2010-11-12T18:13:27.113 に答える