使用严格模式时,访问未定义的变量时会抛出异常。
请考虑以下事项:
"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");
这里发生了什么?
答案 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");
因此,如果条件是真还是假并不重要,则无论如何都要声明变量。