《JavaScript 學(xué)習(xí)指南》閱讀筆記(二)

  1. 創(chuàng)建匿名函數(shù)的語法為
    var func = new Function("param1","param2",...,"paramn,"function body");
    創(chuàng)建函數(shù)字面量的語法為
    var func = function(params){ // function body}
    下面用這兩種方式實(shí)現(xiàn)乘法功能。
    var funcOne = new Function("x", "y", "return x*y;");
    var funcTwo = function (x, y) {
    return x * y;
    }

     var resultOne = funcOne(2, 3);
     var resultTwo = funcTwo(2, 3);
    
     console.log(resultOne + "\n" + resultTwo);
    

匿名函數(shù)和函數(shù)自變量都可以當(dāng)做參數(shù)傳遞給另一個(gè)函數(shù)。二者的區(qū)別是每次調(diào)用匿名函數(shù),都會(huì)解析一次,而函數(shù)自變量自始至終只解析一次。

  1. 我們也可以在 JS 中使用遞歸函數(shù)。

     var func = function add(x) {
         if (x <= 0) {
             return 0;
         } else {
             return x + add(x - 1);
         }
     }
    
     var result = func(4);
     console.log(result);
    
  2. Firefox 中我們可以利用 Firebug 進(jìn)行調(diào)試。

  3. 基于 Netscape 的瀏覽器和 IE 瀏覽器處理 Event 事件的方式是不同的,比如鼠標(biāo)按下事件
    function mouseDown(nsEvent) {
    var theEvent = nsEvent ? nsEvent : window.event;
    var localString = "x = " + theEvent.screenX + ", y = " + theEvent.screenY;
    console.log(localString);
    }

     document.onmousedown = mouseDown;
    

基于 Netscape 的瀏覽器會(huì)將 Event 作為對(duì)象的一部分傳入,而在 IE 中,將 Event 事件視為 window 的屬性。

  1.  <div id="one" style="width: 200px;height: 200px; border: 1px solid red">
         <div id="two" style="width: 100px;height: 100px; border: 1px solid red">
         </div>
     </div>
    
     <script>
         document.getElementById("one").onmousedown = function () {
             alert("one");
         }
    
         document.getElementById("two").onmousedown = function () {
             alert("two");
         }
    
         document.onmousedown = function () {
             alert("document");
         } 
    

對(duì)于以上代碼,只要我們選中 idtwo 的區(qū)域,就會(huì)有三個(gè)彈出框,依次是 two, one, document , 這種情況我們稱之為事件冒泡,那么我們?cè)趺茨茏柚惯@種冒泡機(jī)制呢?在基于 Netscape 的瀏覽器中我們使用 stopPropagation() 方法,在 IE 瀏覽器中我們使用 cancelBubble() 方法。
function stopBubble(event) {
if (event.stopPropagation) {
event.stopPropagation();
} else {
event.cancelBubble = true;
}
}
要先判斷 stopPropagation() 方法是否存在,因?yàn)?cancelBubble 值為 false 的時(shí)候或者屬性不存在的時(shí)候都會(huì)返回 false。

  1. 到了 DOM Level2 ,兩大瀏覽器陣營(yíng)的 Event 事件的綁定仍然不一樣,IE 中使用的是 attachEvent(), 基于 Netscape 瀏覽器使用的是 addEventListener()。對(duì)應(yīng)的,IE 解綁事件用的是 detachEvent(),而其它瀏覽器基本是使用的都是 removeEventListener(),用法和綁定事件差不多。
    var oneObject = document.getElementById("one");
    if (oneObject.addEventListener) {
    oneObject.addEventListener("click", clickMe, true);
    } else if (oneObject.attachEvent) {
    oneObject.attachEvent("onclick", clickMe)
    } else {
    oneObject.onclick = clickMe;
    }

     function clickMe(event) {
         alert("click me");
     }
    
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容