问题1:描述下你对闭包的理解?
答:有权访问另一个函数作用域内变量的函数都是闭包。
举例说明:
function f(x) {
var i = 3;
function b(y) {
alert(x + y + (++i));
}
b(10);
}
f(2)
执行结果是alert出16,b函数可以访问到f函数里面的x,也能访问到下面的变量i,不过这还不是一个闭包,只有当return一个内部functionde的时候才是一个闭包
return function (y) {
alert(x + y + (++i));
}
}
var b = foo(2); // b 现在是一个闭包
b(10);
内部函数执行时,会关闭外部函数,直到内部函数执行结束。
总结:闭包就是一个函数引用另外一个函数的变量,因为变量被引用着所以不会被回收,因此可以用来封装一个私有变量。这是优点也是缺点,不必要的闭包只会徒增内存消耗!另外使用闭包也要注意变量的值是否符合你的要求,因为他就像一个静态私有变量一样。
问题2:left和offsetLeft有什么区别?
答:区别有几点 1.offsetLeft是相对于父对象的左边距,left 获取或设置相对于 具有定位属性(position定义为relative)的父对象 的左边距;如果父对象定位为相对定位relative,这点两者是相同的。2.offsetLeft返回的是数字,可以用于直接计算;left返回的是带有单位的字符串,如:“10px”;3.left是可以读写的,offsetLeft是只能读不能写的;4.left值要事先定义div的left值才能读取到,并且在html里定义,在css里面定义会style.left会获取不到值,offsetLeft一直可以读取到值。
问题3:attr和prop有什么区别?
答:prop返回的是true和false,atrr返回的是属性值,如果html里面没有该属性则返回“undefind”;