withステートメントとは
with ステートメントは、スコープ チェーンを一時的に拡張するために使用されます。構文は次のとおりです。
with ( object ){
statement,
method
}
このステートメントは、オブジェクトをスコープ チェーンの先頭に追加し、関数本体内のコードを実行して、最後にスコープ チェーンを元の状態に戻します。
with ステートメントは厳密モードでは禁止されています. with ステートメントを使用する JavaScript コードは最適化が非常に難しく、with ステートメントを使用しないコードよりも実行速度が遅くなります.
スクリプトを実行する場合、最初にコンパイルしてから実行するという 2 つのプロセスが必要であることがわかっています。
明らかに、コンパイル時に、変数オブジェクトによって表されるオブジェクトがどの属性を持っているかを判断することは不可能です。メソッドがオブジェクトのプロパティであると判断できるのは、実行時だけです。したがって、with ステートメント ブロック内の変数がオブジェクトの属性であるか、前のレイヤーの変数スコープ チェーン内の変数であるかは、コンパイル時に判断できません。
これは、コンパイル時に変数が定義されているかどうかをチェックする厳密モードと競合するため、厳密モードでは差異の存在が許可されないため、厳密モードでは With ステートメントが無効になり、理解に苦しむことはありません。
修正方法
であった:
with(obj||{
}){
p = htmlSource+contentParts
}
今:
p = obj.htmlSource+obj.contentParts
元のオブジェクト アクセスに戻す (ただしそうではない) 代入の破壊のようなもの