亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

JS中關于事件處理函數名后面是否帶括號的問題

 更新時間:2016年11月16日 11:17:41   作者:樂魚  
JS中的事件處理(事件綁定)就是讓某種或某些事件觸發(fā)某些活動。有兩種常見的形式,分別是DOM Level 0 和DOM Level 2。今天總結一個關于事件處理程序的小細節(jié)。感興趣的朋友一起學習吧

今天總結一個關于事件處理程序的小細節(jié)。首先回顧一下事件處理的一些概念。

  JS中的事件處理(事件綁定)就是讓某種或某些事件觸發(fā)某些活動。有兩種常見的形式,分別是DOM Level 0 和DOM Level 2。這兩種方式最大的區(qū)別就在于DOM 0級事件處理只能用于事件冒泡,而DOM 2級事件處理卻可以通過設置第三個參數來分別支持事件冒泡和事件捕獲。

  DOM 0級事件處理一般是直接把一個函數分配給一個事件處理程序,既可以在元素中直接分配一個事件處理程序,如方式一所示;也可以在腳本中把函數分配給事件處理程序,如方式二所示。

<!--方式一-->
<div onclick="fun1();fun2('world!');"></div>
<!--方式二-->
<div id="a">點我</div>
<script>
var a=document.getElementById("a");
a.onclick=fun1; //方式二 
function fun1(){
alert("hello!");
}
function fun2(cc){
alert(cc);
}
</script>

這兩種方式的區(qū)別在上述示例中也顯示了,第一種方式可以同時綁定多個處理函數,但要注意必須是全局函數,否則會拋出Reference錯誤。第二種方式只能一次綁定一個處理函數,否則新的函數會覆蓋舊的函數。

  DOM 2級事件處理不會直接綁定處理函數,而是將函數添加為一個事件監(jiān)聽器如下,他也可以綁定多個處理函數,不會產生覆蓋。但這種方式存在瀏覽器兼容的問題,IE下必須用attachEvent方法代替。

a.addEventListener("click",fun1,false); //事件冒泡
a.addEventListener("click",anotherFun,false); //不會覆蓋上一事件,均被執(zhí)行

  簡單回顧到這里,言歸正傳,不知道在回顧的過程中大家有沒有注意到一個令人困惑的小細節(jié),就是引用函數的時候,函數名稱后面有的時候加括號,有的時候不加括號。這到底對程序的運行有怎樣的影響呢?我經過查閱資料按照自己的理解小小的總結如下。

  首先是加括號的,你可能經常在程序里面這樣寫“fun1();”,沒錯,函數名后邊加括號表示立即執(zhí)行該函數,如果函數內存在返回值則得到該值。這樣用的多了,你可能就習慣在所有調用函數的地方這樣寫,比如之前說的事件處理函數。但是,如果你這樣做了那就可能造成一些失控的狀況。比如說,你明明只是想在點擊某一元素的時候才執(zhí)行函數,卻發(fā)現這個函數在一開始就被執(zhí)行了。你可以發(fā)現,上面舉例時所用的DOM0方式二和DOM2級事件處理函數都沒有在函數名后面加括號,原因就在于避免這種狀況發(fā)生。如果你加了括號,這個函數fun1就會被立即觸發(fā)執(zhí)行。

  那為什么DOM0方式一中卻有括號呢?那是因為標簽的事件屬性里引號之間會被當做js語句直接執(zhí)行,加了括號才能保證調用并執(zhí)行函數。但是由于是用元素標簽這種方式綁定的事件,執(zhí)行的時機就被控制在了點擊該標簽時觸發(fā)。

  如果沒有函數名又想立即執(zhí)行呢?也就是立即執(zhí)行匿名函數表達式,這種模式很常見,來觀察一下它的屁股后面是不是也跟著個立即執(zhí)行小括號呢?注意,這種IIFE形式中包裹著整個函數體的小括號會限制作用域。具體對IIFE感興趣的童鞋可以去查閱相關資料,這里不作贅述。

(function(){
//do something...
})();

  現在再來分析不加括號的,前面我們提到了不加括號可以避免失控。是因為只將函數名傳遞給事件,相當于將函數指針(也就是這個函數的入口地址)傳給元素事件。這樣做的好處就在于可以在需要的時候找到函數并執(zhí)行。打個小比喻來說,你和你的朋友會面,加了小括號時你的朋友就立即出現在你面前,他才不管你當時是不是在忙,有種不請自來的不快感;而不加括號相當于你的朋友告訴了你他家在哪,當你需要他的時候就來找他,這可真是位貼心的朋友啦。所以,大多數事件綁定都僅僅只是傳遞給事件一個函數指針也就是函數名。

  這時又有一個問題,之前說明的都是無參函數,如果是像代碼示例中的fun2這種有參函數怎么辦呢?難道只能用DOM0的方式一那種方法么?當然是否定的,盡量不要使用DOM0方式一那種形式,不符合結構與行為分離的原則。一般這種情況下就是使用匿名函數解決了,如下代碼所示。如果大家有什么好的建議也可以留言分享一下~

//DOM Level 0
a.onclick=function(){
fun2("world!");
};
//DOM Level 2
a.addEventListener("click",function(){fun2("world!");},false);

  以上就是我的總結,如有錯誤還要請大家多多指正,謝謝!感謝一起學習的小伙伴陳童鞋,正是因為他提的問題才讓我注意到了這個經常被忽略的細節(jié)。

以上所述是小編給大家介紹的JS中關于事件處理函數名后面是否帶括號的問題,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網站的支持!

相關文章

  • 用html5 js實現點擊一個按鈕達到瀏覽器全屏效果

    用html5 js實現點擊一個按鈕達到瀏覽器全屏效果

    點擊一個按鈕要實現按F11全屏的效果。 在HTML5中,W3C制定了關于全屏的API,就可以實現全屏幕的效果
    2014-05-05
  • echarts實現晶體球面投影的實例教程

    echarts實現晶體球面投影的實例教程

    這篇文章主要給大家介紹了關于echarts實現晶體球面投影的相關資料,文中介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-10-10
  • 解析OpenLayers 3加載矢量地圖源的問題

    解析OpenLayers 3加載矢量地圖源的問題

    矢量圖形最大的優(yōu)點是無論放大、縮小或旋轉等不會失真。在地圖中存在著大量的應用,是地圖數據中非常重要的組成部分,這篇文章主要介紹了OpenLayers 3加載矢量地圖源的相關資料,需要的朋友可以參考下
    2021-12-12
  • 詳解TypeScript中模塊化開發(fā)指南

    詳解TypeScript中模塊化開發(fā)指南

    在編程中,模塊是指將相關的代碼封裝在一起,形成一個獨立的單元,在這篇文章中,我們將深入探討在TypeScript中如何定義、導入和導出模塊,感興趣的可以了解一下
    2023-06-06
  • JavaScript實現簡易放大鏡最全代碼解析(ES5)

    JavaScript實現簡易放大鏡最全代碼解析(ES5)

    這篇文章主要為大家詳細介紹了JavaScript實現簡易放大鏡最全代碼,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • 獲取JS中網頁各種高寬與位置的方法總結

    獲取JS中網頁各種高寬與位置的方法總結

    本文詳細羅列了如何在javascript獲取網頁各種高寬及位置,內容比較全面,有需要的可以參考一下。
    2016-07-07
  • bootstrap modal+gridview實現彈出框效果

    bootstrap modal+gridview實現彈出框效果

    這篇文章主要介紹了bootstrap modal+gridview實現彈出框效果,gridview點擊更新彈出填寫信息表單,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • uniapp項目實踐封裝通用請求上傳以及下載方法總結

    uniapp項目實踐封裝通用請求上傳以及下載方法總結

    在日常開發(fā)過程中,前端經常要和后端進行接口聯調,獲取并且渲染數據到頁面中,接下來就總結一下?uniapp?中獲取請求、文件下載和上傳的一些方法
    2023-09-09
  • html a標簽-超鏈接中confirm方法使用介紹

    html a標簽-超鏈接中confirm方法使用介紹

    confirm可以彈出確定取消對話框,然后根據用戶的選擇執(zhí)行相應的操作,接下來介紹實現過程,需要了解的朋友可以參考下
    2013-01-01
  • 10分鐘徹底搞懂微信小程序單頁面應用路由

    10分鐘徹底搞懂微信小程序單頁面應用路由

    這篇文章主要給大家介紹了光宇微信小程序單頁面應用路由的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-03-03

最新評論