-
創(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ù)自變量自始至終只解析一次。
-
我們也可以在
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); 在
Firefox中我們可以利用 Firebug 進(jìn)行調(diào)試。-
基于
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 的屬性。
<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ì)于以上代碼,只要我們選中 id 為 two 的區(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。
-
到了
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"); }