今天突然想到個問題,如果在方法中訪問一個將來會存在的變量,能不能成功,如下:function A() { console.log(val);
}function B() { var val = 123;
A();
}
B();//報錯,val未定義按我的想法,A在運行時,首先在內(nèi)部找不到val,必定會沿著作用域鏈往上找,它會在B方法里找到一個val,應該不會報錯才對。如果改成這樣:var val = 456;function A() { console.log(val);
}function B() { var val = 123;
A();
}
B();//456這次val輸出的是456,說明A在運行時確實沿著作用域鏈找到了最外層的val,那為什么會無視掉B中的val呢。難道A方法在定義的時候就必須保證val是存在的?js不是非編譯的么。
為什么這種寫法是錯的
紫衣仙女
2018-10-12 18:10:03