ホームページ > ウェブフロントエンド > jsチュートリアル > setTimeout に関数の呼び出し方法が異なるのはなぜですか?

setTimeout に関数の呼び出し方法が異なるのはなぜですか?

Mary-Kate Olsen
リリース: 2024-11-25 12:36:11
オリジナル
198 人が閲覧しました

Why Does setTimeout Have Different Ways of Calling Functions?

setTimeout の括弧と引用符の謎を分析する

JavaScript タイミング イベントを詳しく調べると、setTimeout 関数はその多様な使用法により混乱を招くことがよくあります。 。 3 つの一般的な呼び出し方法の違いを明確にしましょう。

括弧付き

setTimeout("alertMsg()", 3000);
ログイン後にコピー

この構文では、関数は double 内の文字列として渡されます。引用。 JavaScript はこれを、指定された時間の後に実行されるコード文字列として解釈します。セキュリティ上の脆弱性があるため、この使用法はお勧めできません。

引用符と括弧なし

setTimeout(alertMsg, 3000);
ログイン後にコピー

このよりクリーンなアプローチは、関数を参照として直接渡します。参照は、名前付き関数、匿名関数、または関数を指す変数にすることができます。これは、潜在的なセキュリティ上の懸念を排除し、コードを簡素化するため、推奨される方法です。

引用符のみを使用

setTimeout("alertMsg", 3000);
ログイン後にコピー

この独特の構文では、文字列が渡されます。括弧なしで。このメソッドは非推奨であり、予期しない動作を引き起こす可能性があります。

setTimeout で引数を指定して関数を呼び出すには、コールバック内に呼び出しを埋め込むか、後者の構文で引数を指定することができます (ブラウザ間互換性はありません)。 :

setTimeout(function() { foo(arg1, arg2); }, 1000);
ログイン後にコピー

または

setTimeout(foo, 2000, arg1, arg2);
ログイン後にコピー

コールバック コンテキストを覚えておいてください(this キーワード) のデフォルトはグローバル オブジェクトです。これを変更するには、bind() メソッドを利用します。

setTimeout(function() { this === YOUR_CONTEXT; // true }.bind(YOUR_CONTEXT), 2000);
ログイン後にコピー

セキュリティ リスクのため、文字列を setTimeout に渡すことは強く推奨されないことに注意してください。セキュリティを維持し、予測可能な実行を保証するために、常に関数参照を直接渡します。

以上がsetTimeout に関数の呼び出し方法が異なるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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