-
创建匿名函数的语法为
var func = new Function("param1","param2",...,"paramn,"function body");
创建函数字面量的语法为
var func = function(params){ // function body}
下面用这两种方式实现乘法功能。
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);
匿名函数和函数自变量都可以当做参数传递给另一个函数。二者的区别是每次调用匿名函数,都会解析一次,而函数自变量自始至终只解析一次。
-
我们也可以在
JS中使用递归函数。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 进行调试。-
基于
Netscape的浏览器和IE浏览器处理Event事件的方式是不同的,比如鼠标按下事件
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 的区域,就会有三个弹出框,依次是 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()。对应的,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"); }