js 匿名函數 閉包

來源:互聯網
上載者:User
沒有彈出框

<script language="javascript" type="text/javascript">function start(){var nid=document.getElementsByTagName("li");nid.onclick=function(){alert("4");}}window.onload=start;</script>

 

這樣才有彈出對話方塊

<script language="javascript" type="text/javascript">function start(){var nid=document.getElementsByTagName("li");nid.onclick=(function(){alert("4");})()}window.onload=start;</script>

 

運行後,不論點擊哪一個li,都是alert提示“4”。

這就是一個需要注意的地方:

閉包允許內層函數引用父函數中的變數,但是該變數是最終值。閉包引用的變數i,是迴圈結束後的值

<script language="javascript" type="text/javascript">var li=document.getElementsByTagName("li");for(var i=0;i<li.length;i++){li[i].onclick=function(){alert(i);}}</script>

 

用閉包來解決

<script language="javascript" type="text/javascript">
var li=document.getElementsByTagName("li");
for(var i=0;i<li.length;i++){
   (function(index){
   li[index].onclick=function(){alert(index);}
   })(i);
}
</script>

 

 

 

注意順序:先彈出“clicked” 再彈出“also clicked”

<script>var fnClick1 = function(){ alert("clicked"); };var fnClick2 = function(){ alert("also clicked"); };var oDiv = document.getElementById("div");oDiv.attachEvent("onclick",fnClick2);oDiv.attachEvent("onclick",fnClick1);</script>

 先彈出“also clicked” 再彈出“clicked”

var oDiv = document.getElementById("div");oDiv.attachEvent("onclick",fnClick1);oDiv.attachEvent("onclick",fnClick2);

 

 

.onclick後面的是最先執行的
attachEvent進去的事件 就DOM的解釋是亂續的。
但實際測試時 IE是後綁定的先執行,FF是先綁定的先執行.

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.