一個挺有意思的Javascript小問題
先來看以下3段代碼
1 var firstName = "Mark";
2 (function DisplayFirstName() {
3 console.log(firstName);
4 })();//必然輸出 Mark
5
6 var lastName = "Aut";
7 (function DisplayLastName() {
8 var lastName = "Bru";
9 console.log(lastName);
10 })();//必然輸出 Bru, 本地作用域的優先級高于全局作用域
11
12 //那么下面這段代碼呢?
13
14 var lastName = "Aut";
15 (function DisplayLastName() {
16 console.log(lastName);
17 var lastName = "Bru";
18 console.log(lastName);
19 })();//誰能猜出結果是什么?
這個輸出的結果是:
LOG: undefined
LOG: Bru
這出乎了我的意料, 我原來以為應該是 "Aut" 和 "Bru"的
我原來的理解是: 在程序第一個輸出lastName的時候, 程序沒有找到本地聲明的lastName變量,所以使用了全局的lastName定義, 第二次的時候才使用本地變量的值
(因為在我的概念里,javascript是解釋型語言,一句一句的......執行)
看到這個結果,看來javascript的執行并不都是順序的..
目前為止,就我的猜測,javascript執行應該是先做語法分析,然后順便分析完成了變量表(本地和全局)
然后才開始順序執行一行行腳本
還請各位javascript高手解惑
浙公網安備 33010602011771號