我正在阅读ECMA 5 262,并对http://es5.github.com/#IsStrictReference中的“严格参考”一词感到困惑:
参考是已解析的名称绑定。 Reference由三个组件组成,基值,引用名称和布尔值严格引用标志。基值是undefined,Object,Boolean,String,Number或环境记录(10.2.1)。基本值undefined表示无法将引用解析为绑定。引用的名称是String。
关于它的描述不多。 Reference上唯一的相关操作是
IsStrictReference(V)。返回引用V的严格引用组件。
但没有设置操作,也没有描述我们如何决定价值。
我想它必须与严格模式有关,但我怎么知道具体参考的价值是什么?
答案 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
。