JS基礎知識積累

1、undefined返回不同的場景。
以window.xxx引用全局變量,尋找不到,會作爲某個屬性不存在,返回undefined.
直接以XXX引用某變量,尋找不到,則是報xxx is not defined錯誤。

2、作用域問題。

//場景1
var str1 = 'global';
function t1(){
    console.log(str1); //global
    console.log(str2); // undefined
    var str2 = 'local';
}
t1();
//場景2
var str1 = 'global';
function t1(){
    console.log(str1); //global
    console.log(str2); // str2 is not defined
    str2 = 'local';
}
t1();
//場景3
function a(b){
    alert(b);
    function b(){
        alert(b);
    }
    b();
}
a(1);//答案爲兩個b函數

總結:
JS代碼執行:
a、先進行詞法分析(預編譯)
分析參數–>分析變量聲明–>分析函數聲明;
具體步驟:
1:函數運行前一瞬間,生成Active Object(活動對象),下稱AO;
2:把收到的參數,形成AO的屬性,參數的值即屬性的值
3:分析變量聲明!如var age;
如果AO上還沒有age屬性,則添加AO屬性,值爲undefined
如果AO上已經有age屬性,則不做任何影響
4:分析函數聲明,如function foo() {},即把函數賦給AO.foo屬性,如果此前foo屬性已存在,則會被無情的覆蓋。

var str = 'local';//分爲分析過程和執行過程
//先分析聲明 var str;纔是str的值爲undefined;
//再執行賦值操作 str = 'local';

b、然後JS代碼自上而下執行;

js詞法分析可以下文檔:
js詞法分析
燕十八JavaScript高級視頻教程
初識JavaScript的解析與執行過程

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章