function positionMessage(){ var elme = document.getElementById("message"); elme.style.position = "absolute"; elme.style.left = "50px"; elme.style.top = "100px"; moveMessage("message",125,25,20); var elme = document.getElementById("message2"); elme.style.position = "absolute"; elme.style.left = "50px"; elme.style.top = "50px"; moveMessage("message2",125,125,20);}
這個(gè)elme變量第一次定義咧document.getElementById("message");
第二次被定義document.getElementById("message2");
為什么這兩個(gè)效果能同時(shí)出現(xiàn),而不是第二次定義的變量覆蓋了第一次的呢?
用var
聲明有個(gè)變量提升的問題。實(shí)際上確實(shí)是覆蓋的。上面的代碼等同于下面:
樣式代碼在覆蓋之前已經(jīng)被執(zhí)行,所以兩種效果都存在。
你大概是沒有弄懂聲明前置, var elme = document.getElementById("message")
這行代碼是拆分為var elme;elme=document.getElementById("message")
這兩行代碼的,聲明前置是指我們能夠獲取聲明的指針名字,但是無法獲取它的賦值,對(duì)于瀏覽器來說都只是重復(fù)了相同的動(dòng)作——var elme
而已,也就是它知道了elme這個(gè)指針被聲明了(你可以理解為占位符),但不清楚這個(gè)指針指向哪里。獲取指針后,JS代碼是逐條依次執(zhí)行的,先是被賦給message,(elme=document.getElementById("message")
),執(zhí)行了代碼后,又賦給了(elme=document.getElementById("message2")
),然后再執(zhí)行代碼。so當(dāng)然兩個(gè)效果都會(huì)出現(xiàn)了,你可以測(cè)試下如果聲明函數(shù)和變量為一個(gè)指針名會(huì)出現(xiàn)什么情況,那大概就是你期望出現(xiàn)的覆蓋報(bào)錯(cuò)。