1、考察闭包的用法
var a = 0
function fn(b){
return function fb(c){
console.log(a++,b++,c++)
}
}
var f1 = fn(0)
var f2 = fn(0)
fn(0) b=0 带入后返回 funciton fb(c){…….} 即f1的值此时, 运行f1() 则,a++ 都是先用再加1. f1() 没有传参数,为undefined,undefined++ 得到NaN。所以,打印出来:0 0 NaN
f1()
f2 运行c=undefined a是全局变量 在上一轮打印后为1,由fn(0)得到也为0,结果:1 0 NaN
f2()
var f1 = f2 = fn(fn(0))
fn(0) 返回 function fb(c){…..} 所以,fu( fn(0) ) 参数为function fb(c){…..} 即 b 的值。所以,由上一轮此时打印a 为2(a的值为3),最终结果为:2 NaN NaN
f1() // 2 NaN NaN
f2() // 3 NaN NaN
2 代码的预加载
var a = 10
fn()
function fn(){
var a
alert(a) //undefined
a=20
}
alert(a) //10
3 event对象的方法属性
event代表事件的状态,例如触发event对象的元素、鼠标的位置及状态、按下的键等等。
event对象只在事件发生的过程中才有效。
event的某些属性只对特定的事件有意义。比如,fromElement 和 toElement 属性只对 onmouseover 和 onmouseout 事件有意义。
属性:
altKey, button, cancelBubble, clientX, clientY, ctrlKey, fromElement, keyCode, offsetX, offsetY, propertyName, returnValue, screenX, screenY, shiftKey, srcElement, srcFilter, toElement, type, x, y
var target = evt.target || evt.srcElement;
//获取触发事件的原始事件源标准的DOM方法是用target ,IE用event.srcElement
event.preventDefault() //阻止默认事件