ECMA 5 262中严格参考标志的含义是什么

时间:2012-07-28 06:36:01

标签: javascript ecmascript-5

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

  

参考是已解析的名称绑定。 Reference由三个组件组成,基值,引用名称和布尔值严格引用标志。基值是undefined,Object,Boolean,String,Number或环境记录(10.2.1)。基本值undefined表示无法将引用解析为绑定。引用的名称是String。

关于它的描述不多。 Reference上唯一的相关操作是

  

IsStrictReference(V)。返回引用V的严格引用组件。

但没有设置操作,也没有描述我们如何决定价值。

我想它必须与严格模式有关,但我怎么知道具体参考的价值是什么?

1 个答案:

答案 0 :(得分:1)

据我所知,当初始化ECMAScript 5(aka ES5)中使用strict mode的引用时,它是引用设置为true的属性。设置strict mode后,更多操作将导致错误(语法,引用,例如初始化不带var关键字的变量)。有关strict mode的更多信息,请参阅MDN-documentation

[编辑]根据评论 我认为这是针对定义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