-
創(chuàng)建匿名函數(shù)的語法為
var func = new Function("param1","param2",...,"paramn,"function body");
創(chuàng)建函數(shù)字面量的語法為
var func = function(params){ // function body}
下面用這兩種方式實現(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ù)傳遞給另一個函數(shù)脆栋。二者的區(qū)別是每次調(diào)用匿名函數(shù)爷怀,都會解析一次,而函數(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
的瀏覽器會將 Event
作為對象的一部分傳入,而在 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"); }
對于以上代碼,只要我們選中 id
為 two
的區(qū)域认罩,就會有三個彈出框箱蝠,依次是 two, one, document
, 這種情況我們稱之為事件冒泡垦垂,那么我們怎么能阻止這種冒泡機制呢宦搬?在基于 Netscape
的瀏覽器中我們使用 stopPropagation()
方法,在 IE
瀏覽器中我們使用 cancelBubble()
方法劫拗。
function stopBubble(event) {
if (event.stopPropagation) {
event.stopPropagation();
} else {
event.cancelBubble = true;
}
}
要先判斷 stopPropagation()
方法是否存在间校,因為 cancelBubble
值為 false
的時候或者屬性不存在的時候都會返回 false
。
-
到了
DOM Level2
页慷,兩大瀏覽器陣營的Event
事件的綁定仍然不一樣憔足,IE
中使用的是attachEvent()
, 基于Netscape
瀏覽器使用的是addEventListener()
。對應(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"); }