先來看以下3段代碼
復制代碼 代碼如下:
var firstName = "Mark";
(function DisplayFirstName() {
console.log(firstName);
})();//必然輸出 Mark
var lastName = "Aut";
(function DisplayLastName() {
var lastName = "Bru";
console.log(lastName);
})();//必然輸出 Bru, 本地作用域的優先級高於全局作用域
//那麼下面這段代碼呢?
var lastName = "Aut";
(function DisplayLastName() {
console.log(lastName);
var lastName = "Bru";
console.log(lastName);
})();//誰能猜出結果是什麼?
這個輸出的結果是:
LOG: undefined
LOG: Bru
這出乎了我的意料, 我原來以為應該是 "Aut" 和 "Bru"的
我原來的理解是: 在程序第一個輸出lastName的時候, 程序沒有找到本地聲明的lastName變量,所以使用了全局的lastName定義, 第二次的時候才使用本地變量的值
(因為在我的概念裡,javascript是解釋型語言,一句一句的......執行)
看到這個結果,看來javascript的執行並不都是順序的..
目前為止,就我的猜測,javascript執行應該是先做語法分析,然後順便分析完成了變量表(本地和全局)
然後才開始順序執行一行行腳本
還請各位javascript高手解惑