javascript"使用严格&#34 ;;阻止范围不正确

时间:2015-05-25 21:26:35

标签: javascript scope strict

使用严格模式时,访问未定义的变量时会抛出异常。

请考虑以下事项:

"use strict";
alert(typeof mistypedVaraible + " one");
alert(mistypedVaraible + " two");

仅触发第一个警报,因为在尝试访问第二个警报中的未定义变量时会引发异常。所以在第二个警报之前定义它:

"use strict";
alert(typeof mistypedVaraible + " one");
if(typeof mistypedVaraible == "undefined") { var mistypedVaraible; }
alert(mistypedVaraible + " two");

两个警报都会触发,因为undefined的测试声明了变量。

但是如果测试失败并且变量未定义,则第二个警报仍然会触发,就像" if"块被执行以定义变量:

"use strict";
alert(typeof mistypedVaraible + " one");
if(typeof mistypedVaraible != "undefined") { var mistypedVaraible; }
alert(mistypedVaraible + " two");

这里发生了什么?

1 个答案:

答案 0 :(得分:2)

变量声明被提升到顶部。

因此,这些例子就像

"use strict";
var mistypedVaraible;
alert(typeof mistypedVaraible + " one");
if(typeof mistypedVaraible == "undefined") { mistypedVaraible; }
alert(mistypedVaraible + " two");
"use strict";
var mistypedVaraible;
alert(typeof mistypedVaraible + " one");
if(typeof mistypedVaraible != "undefined") { mistypedVaraible; }
alert(mistypedVaraible + " two");

因此,如果条件是真还是假并不重要,则无论如何都要声明变量。