3

私は ECMA 5 262 を読んでいましたが、http://es5.github.com/#IsStrictReferenceの「厳密な参照」という用語に混乱しています。

Reference は解決された名前バインディングです。参照は、ベース値、参照名、およびブール値の厳密な参照フラグの 3 つのコンポーネントで構成されます。ベース値は、未定義、オブジェクト、ブール値、文字列、数値、または環境レコード (10.2.1) のいずれかです。undefined の基本値は、参照をバインディングに解決できなかったことを示します。参照される名前は文字列です。

それについての説明はあまりありません。Reference で関連する唯一の操作は次のとおりです。

IsStrictReference(V)。参照 V の厳密な参照コンポーネントを返します。

ただし、設定する操作も、値を決定する方法の説明もありません。

厳密モードに関連しているに違いないと思いますが、特定の参照の値をどのように知ることができますか?

4

1 に答える 1

1

私が理解している限り、これはstrict mode、ECMAScript 5(別名ES5)で初期化された参照を使用するときにtrueに設定された参照のプロパティです。を設定するstrict modeと、操作が増えるとエラーが発生します(構文、参照、varキーワードなしで変数を初期化するなど)。詳細については、MDNドキュメントを参照してくださいstrict mode

[編集]コメントに基づいてstrict mode定義されているスコープ用だと思います。だからで

function strict()
{ 'use strict';
  // from here on and within the function
  // IsStrictReference is true
  showme = "Am I defined?";
  return "Hi!  I'm a strict mode function!  " + showme;
}

function nonstrict()
{ 
  // IsStrictReference is ... well, undefined I suppose, or false by default
  showme2 = "Am I defined?";
  return "Hi!  I'm NOT a strict mode function!  " + showme2;
}
strict(); //=> ReferenceError: showme is not defined
notstrict(); //=> "Hi!  I'm NOT a strict mode function! Am I defined?"

実行 すると、がstrict()スローされますが、スローされません。-ステートメントを関数ブロックの外側に配置した場合、両方の関数を実行すると。がスローされます。ReferenceErrornonstrict()use strictReferenceError

于 2012-07-28T09:01:11.357 に答える