<script type="text/javascript"> var c=5; function t1(){ var d=6 function t2(){ var e=7 alert(c+d+e); } t2(); } t1(); </script>這個你很是快會得出結論:18。
<script language="javascript" type="text/javascript"> function t1(){ var d; function t2(){ d=5; e=6; } t2(); } t1(); alert(e); alert(window.d); </script>
思考下?……javascript
你的答案是 6。undefined嗎?假設不是請繼續往下看吧,這事實上就是做用域鏈的問題。java
咱們知道js中用var聲明一個變量 ,尋找變量首先在函數內尋找。找不到則再往外層尋找直到全局(window)區域。這就是第一個程序的根據
window.xxx引用全局變量,找不到做爲某個屬性不存在,則返回undefined。函數
好了再看一個:spa
<script type="text/javascript"> var str1='global'; function t1(){ alert(str1); alert(str2); var str2='local'; } t1(); </script>
這個假設你在網上查好多關於做用域的都有這個樣例來解釋,但是看了他們洋洋灑灑寫了好多結果本身越看越迷糊。code
歷經千辛萬苦最終得出了很是有用的方法,省得看太多讓人頭暈的東西。視頻
事實上js代碼在整體執行時分爲:詞法分析期和執行期。對象
詞法分析分析3樣東西:第一步:先分析參數
根據整理分析下如下:blog
<script type="text/javascript"> function t2(age){ var age=99; alert(age); } t2(5);//執行結果是99 </script>分析過程:
0:造成AO={}ip
1.分析形參age爲undefined作用域
2.分析var age 發現AO已經有age屬性。不作不論什麼影響
運行過程:AO.age=99;
alert(age)結果爲99
明確了做用域鏈分析出結果咱們才幹更好的明確視頻中解說的樣例,之後不再用操心本身找不到「北」了!