新手求助問題,為什么這個變量是同一個,而不被覆蓋呢?
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 = "a<愛尬聊_創建詞條>bsolute"; elme.style.left = "50px"; elme.style.top = "50px"; moveMessage("message2",125,125,20);}
這個elme變量第一次定義咧document.getElementById("message");
第二次被定義document.getElementById("message2");
為什么這兩個效果能同時出現,而不是第二次定義的變量覆蓋了第一次的呢?
幸福341#p#suzhaoy 2022-07-17 10:24
用var聲明有個變量提升的問題。實際上確實是覆蓋的。上面的代碼等同于下面:
ALARAZ 2022-07-17 10:26
樣式代碼在覆蓋之前已經被執行,所以兩種效果都存在。
FXYwan 2022-07-17 10:29
你大概是沒有弄懂聲明前置, var elme = document.getElementById("message")這行代碼是拆分為var elme;elme=document.getElementById("message")這兩行代碼的,聲明前置是指我們能夠獲取聲明的指針名字,但是無法獲取它的賦值,對于瀏覽器來說都只是重復了相同的動作——var elme而已,也就是它知道了elme這個指針被聲明了(你可以理解為占位符),但不清楚這個指針指向哪里。獲取指針后,JS代碼是逐條依次執行的,先是被賦給message,(elme=document.getElementById("message")),執行了代碼后,又賦給了(elme=document.getElementById("message2")),然后再執行代碼。so當然兩個效果都會出現了,你可以測試下如果聲明函數和變量為一個指針名會出現什么情況,那大概就是你期望出現的覆蓋報錯。
