首页 > 有关javascript中的referenceerror异常问题

有关javascript中的referenceerror异常问题

有关于js中的ReferenceError问题,在《你不知道的Javascript》一书的第一章中有提到:

如果RHS查询在所有嵌套的作用域中遍寻不到所需的变量,引擎就会抛出 ReferenceError 异常。

那请问,下面的两个例子有啥区别呢?两者都是因为在作用域中找不到所需的变量,但为啥一个是undefined,一个是ReferenceError。

<script>
    console.log(window.a);     // undefined
    console.log(a);            // ReferenceError异常
</script>

這就是變量提升(即在es5標準下,在定義之前調用變量,會出現變量提升undefined),由於在es5裡面只有全局作用域和函數作用域,在瀏覽器環境裡面你的a和window.a是等價的,這樣寫都是undefined.

Ps:Es6有塊作用域,使用let代替var,可以解決這種困擾了


第一行代码里的a是作为window的property引用的,不会报错,事实上查询window上的任何property(不管property是否真的存在window上)都不会报错.

第二行代码里的a相当于global varibal, 使用之前必须要声明(declaration),否则会报错。

【热门文章】
【热门文章】