3

我正在阅读 ECMA 5 262,对http://es5.github.com/#IsStrictReference中的“严格参考”一词感到困惑:

引用是解析的名称绑定。引用由三个部分组成,基值、被引用的名称和布尔值的严格引用标志。基值是未定义的、对象、布尔值、字符串、数字或环境记录 (10.2.1)。未定义的基值表示无法将引用解析为绑定。引用的名称是一个字符串。

关于它的描述不多。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()抛出一个ReferenceError,但nonstrict()没有。如果您将 - 语句放置use strict在功能块之外,则执行这两个功能都会抛出ReferenceError.

于 2012-07-28T09:01:11.357 回答