ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScriptのストリクトモードとキーワード入門_基礎知識

JavaScriptのストリクトモードとキーワード入門_基礎知識

WBOY
WBOYオリジナル
2016-05-16 17:01:091187ブラウズ

2009 年 12 月に、ECMAScript は ECMAScript 5 をリリースしました。ECMAScript 3 標準の前のバージョンのリリースから 10 年が経過しましたが、この期間中、JavaScript は Web プログラミングで普及していましたが、最終的には ECMAScript 4 が大手メーカーや組織に採用されました。言語の複雑さ (つまり、ECMAScript の機能を拡張するために多数の機能を追加するかどうか) が意見の相違によって妨げられ、新しい ECMAScript 標準の策定がプログラミングの実践から大きく遅れました。 ECMAScript 5 では、JSON のサポートとリフレクションのより包括的な制御の追加に加えて、「厳密モード」の導入がそれほど野心的ではありません。このモードでは、ECMAScript の構文がより厳密になるため、必須の変数宣言や with ステートメントの禁止など、エラーが発生しやすい一般的なコードの多くが許可されなくなります。このモードの採用は非常に簡単で、スクリプト ファイルまたは関数の最初の行に「use strict」という文字列を追加するだけです。

著者は後に、2010 年に with キーワードの欠点について論じた小さな記事を書いたことを知りました。以下に添付します。
ウェッジ

昔、魔法のペン馬良の故郷は、彼を記念して道路に彼の名前を付けたいと考えていました。馬良氏は拒否しなかったが、4つの言葉でアドバイスを行った。何年も後、ある外国人がここに来て、この道で地元の人を呼び止めて道を尋ねました。

すみません、ここは聖道ですか?

はい、ここは神馬路です。

あなたも知りませんか?

私はここにいる人間ですが、どうして分からなかったのでしょう。

では、ここは聖道なのでしょうか?

なぜ知ってから聞くのですか。

これが聖道だなんて知りません。

では、ここは聖なる道だということはすでに言いましたね?

ここは聖道だともう一度言えますか?

......

その後、地元の男は魔法のペンである馬良の意見を思い出し、ハッと気づきました。馬良氏が言ったのは、略語を使うなということだ。

質問

ある日、トムは中国人の友人、ワン・アーにこう言いました。「私には夢がある。CCTVに自分の姿を映したい。」翌日、トムは近所の店に侵入しました。

問題は、トムがいつ夢を語ったのかということです、彼は

A)野心的な B) 野心的ではない C) 曖昧な D) 曖昧でない

正解は B) と C) です。これはJavaScriptにも存在します。

objectWithLongName1.propty1=value1;

objectWithLongName1; のような長い名前の変数を繰り返し参照するのは面倒な場合があります。 =value3;

objectWithLongName1.method1();

しかし、プログラムを読みやすくするためには、明確な名前が非常に重要です。したがって、JavaScript には with ステートメントが用意されています。上記の例は次のように書き換えることができます:




コードをコピー

コードは次のとおりです: with (objectWithLongName1){ propty1=value1;
propty3=value3;

}


これにより、キーボードで入力する時間が大幅に節約され、プログラムの構造がより明確になります。しかし、このような略語は曖昧さをもたらします。中括弧内の名前 (objectWithLongName1 のプロパティとメソッド、および外部変数と関数) をどのようにして知ることができるのでしょうか。 Javascript の解析ルールでは、まず objectWithLongName1 でこれらの名前のプロパティを検索します。見つからない場合は、外部変数とみなされます。コードの説明は次のとおりです:




コードをコピーします

コードは次のとおりです:

objectWithLongName1.property1=value1;//可能 2

}

}else{

if(objectWithLongName1.value1!== unknown){

property1=objectWithLongName1.value1; //おそらく 3

}else{

property1=value1; //おそらく 4

}

}


私たちが期待しているのはこれら 4 つの可能性のいずれかですが、注意しないとプログラムの実行は別の可能性になります。また、この書き方はプログラムの読者にとっても非常に分かりにくいものです。一方、JavaScript インタプリタの場合、この不確実性は言語のパフォーマンスにも影響します。

実際、小さな改善が必要な限り、これらの欠陥は解消できます。省略されたオブジェクトのプロパティの前にピリオドを追加することで、プロパティと外部変数を直感的に区別できるようになります。これは、他の多くの言語でも行われます。最初の例は次のようになります:




コードをコピーします

コードは次のようになります:

with (objectWithLongName1){

.propty1=value1;

.propty3=value3; .method1();

}


JavaScript がそのような改善を行う前に、with ステートメントの使用を避けることは、2 つの弊害のうち小さい方です。まだいくつかの回避策を使用できます。



コードをコピーします
コードは次のとおりです。 var o1= objectWithLongName1; 🎜>o1 .propty1=value1;
o1.propty3=value3;

o1.method1();
または次のような場合:

objectWithLongName1.propty1= objectWithLongName2.propty1;

objectWithLongName1.propty2= objectWithLongName2.propty2;





コードをコピー


コードは次のとおりです。


(function(o1 , o2, pl){

pl.forEach(function(item){o1[item]=o2[item];})

})( objectWithLongName1,objectWithLongName2, ['propty1 '、'propty2'、…、'propty10']);
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。