代码改变世界

随笔档案-2012年7月9日

深入闭包

2012-07-09 13:48 by 江苏黑马, 472 阅读, 收藏,
摘要: 什么是闭包?现在有三个函数。a()、b()和c()。如果满足一下条件则构成闭包。(1)函数b嵌套在函数a内部;(2)函数a返回函数b。当函数a的内部函数b被函数a外的一个变量引用的时候,就创建了一个闭包。闭包的作用?闭包使得Javascript的垃圾回收机制GC不会收回a所占用的资源。在Javascript中,如果一个对象不再被引用,那么这个对象就会被GC回收。如果两个对象互相引用,而不再被第3者所引用,那么这两个互相引用的对象也会被回收。因为函数a被b引用,b又被a外的c引用,这就是为什么函数a执行后不会被回收的原因。示例代码:<!doctype html><html> 阅读全文

call方法、apply方法、caller属性和callee属性

2012-07-09 09:51 by 江苏黑马, 1232 阅读, 收藏,
摘要: call方法。call([thisObj[,arg1[, arg2[, [,.argN]]]]]) 参数 thisObj 可选项。将被用作当前对象的对象。 arg1, arg2, , argN 可选项。将被传递方法参数序列。 说明 call 方法可以用来代替另一个对象调用一个方法。call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。 如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj。举一个具体的例子:function add(a,b){ alert(a+b);}function sub(a,b){... 阅读全文