ホームページ >ウェブフロントエンド >jsチュートリアル >Javascriptの関数宣言と関数表現(スゴ技と巧妙なテクニック)_JavaScriptスキル

Javascriptの関数宣言と関数表現(スゴ技と巧妙なテクニック)_JavaScriptスキル

WBOY
WBOYオリジナル
2016-05-16 18:09:531145ブラウズ

例を示します:


[Ctrl A すべて選択 注: 外部 Js を導入する必要がある場合は、それを実行するために更新する必要があります
]

やってみるとわかります コードの意味は、関数を宣言してすぐに実行することです。JavaScript の変数スコープは関数に基づいているため、変数の汚染を避けることができますが、ここでビット演算子「~」がわかりにくいです。これを削除して再度実行すると、SyntaxError というエラーが報告されます。

その理由を説明する前に、まず JavaScript の 2 つの概念、関数宣言と関数式を明確にしましょう:

まず、関数宣言とは何かを見てみましょう:

[Ctrl A すべて選択 注:
外部 Js を導入する必要がある場合は、更新して実行する必要があります
]
関数式がどのようなものかを見てください:
[Ctrl A すべて選択 注:
外部 Js を導入する必要がある場合は、更新して
を実行する必要があります]

今すぐ記事の冒頭を振り返ってください。問題は、ビット演算子「~」を削除した後になぜエラーが報告されるのかということです。これは、構文解析の観点から、JavaScript では関数宣言の直後に括弧を使用することができないためです。一方、関数式にはこの制限はありません。関数宣言の前に「~」演算子を追加すると、構文パーサーは同様に、「!、, -」およびその他の演算子を関数式として扱うことができます。関数宣言も可能です。
それでは、次のような関数式を使ってみてはいかがでしょうか?

[Ctrl A すべて選択 注:
外部 Js を導入する必要がある場合は、
を実行するために更新する必要があります]

構文解析の観点からは問題ないようですが、上記のコードには変数が導入されているため、既存の動作環境が汚染され、潜在的な問題が発生する可能性があります。


<script> ~function() { alert("hello, world."); }(); </script>[Ctrl A すべて選択 注: <script> function() { alert("hello, world."); }; function foo() { alert("hello, world."); }; </script>外部 Js を導入する必要がある場合は、それを実行するために更新する必要があります <script> var foo = function() { alert("hello, world."); }; </script>]<script> var foo = function() { alert("hello, world."); }(); </script> <script> (function() { alert("hello, world."); })(); </script>原則はわかりました。どんな書き方に出会っても、ザンガー修道士はもう混乱することはありません。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。