JavaScript 関数宣言と関数式の違いの紹介_JavaScript スキル

WBOY
リリース: 2016-05-16 17:20:40
オリジナル
1088 人が閲覧しました

同じように、コードから始めます:

コードをコピーします コードは次のとおりです:

<スクリプト>
var f = function g() {
return 1;
if (false) {
f = function g(){
return 2 ;
};
}
alert(g()); // 2


このコードを IE 6 に入力すると、次のようになります。 Chrome とはまったく異なります。

ここでの出力 2 は ie6 での効果です。Chrome の場合、g が定義されていないように見えます。

これは JScript のバグと考えられます。

ここにあるのは g を定義する関数式にすぎないことは明らかです。 if 条件文には関数式のみが定義されており、関数は宣言されていません。

それでは、そのような直接アクセスは間違いなく間違っています。

では、ステートメントとは何で、関数式とは何でしょうか?

ECMAScript では、関数を作成する 2 つの最も一般的な方法は、関数式と関数宣言です。ECMA 仕様では、関数宣言には ( を付ける必要がある) という 1 つの点だけが明確にされているため、この 2 つの違いは少しわかりにくいです。
関数宣言:
関数 関数名 (パラメーター: オプション) {関数本体}
関数式:
Function 関数名 (オプション) (パラメータ: オプション) {関数本体}

したがって、関数名が宣言されていない場合は式でなければならないことがわかりますが、If関数名が宣言されていますが、それが関数宣言なのか関数式なのかを判断するにはどうすればよいですか? ECMAScript はコンテキストによって区別されます。関数 foo(){} が代入式の一部である場合、関数 foo(){} が関数本体内に含まれている場合、またはプログラムの先頭にある場合、それは関数式です。関数宣言。

括弧で囲まれた関数式 (function foo(){}) というあまり一般的ではない関数式もあります。これが式である理由は、括弧 () がグループ化演算子であるためです。内部には式のみを含めることができます。

eval を使用して JSON を実行する場合、通常、JSON 文字列は eval('(' json ')') のように括弧で囲まれていると思われるかもしれません。その理由は、グループ化演算子であるためです。この括弧のペアにより、パーサーは JSON 中括弧をコード ブロックではなく式に解析するように強制されます。
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!