您的位置:首页 > Web前端 > JavaScript

JavaScript中undefined和is not defined异常

2015-09-08 22:00 441 查看
不解释,直接上代码:

console.log(xx);
console.log(window.xx);

(其中xx是一个不存在的变量)

当直接打印xx变量时,直接抛出一个is not defined异常并终止执行。

然而将xx变量以window.xx的形式打印出来时,缺直接输出一个undefined,并没有出现异常,可以继续执行。

查阅相关文档之后才知道,打印undefined说明该变量已经声明,但没有赋值;打印is not defined异常说明该变量连声明都没有。通过这条结论说明,window.xx的形式会在window对象中隐式的声明该变量。

这也说明了,为什么以下代码可以直接运行了。

window.xx = 2;
console.log(window.xx);

另外有个一个相关的问题,见代码:

function t1() {
console.log(str2); //undefined
var str2 = 'mike';
}
t1();和
function t1() {
console.log(str2); //is not defined
str2 = 'mike';
}
t1();

第一种情况涉及到JavaScript的运行阶段,分为词法分析阶段和运行阶段,在词法分析阶段时,先声明了str2变量但没有赋值,所以在运行阶段就出现了undefined。
第二种情况在词法分析阶段也无法声明str2,因为没有var关键字声明,所以在运行阶段直接抛出异常。

还有一点需要注意的是,凡是没有使用var声明的变量,最终都会成为全局对象window的属性,如下代码:

function t1() {
a = 10
console.log(a);//10
console.log(window.a);//10
}
t1();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  javascript