闭包
先来一句话解释闭包,仅仅这是我对W3C中对闭包表述的理解。
闭包: 被 “外部引用” 的 “使用了不属于自己代码块的变量” 的 函数。
垃圾回收机制:
如果一个对象不再被引用, 那么这个对象就会被垃圾回收机制回收;
如果两个对象互相引用, 且不再被第3者所引用, 那么这两个互相引用的对象也会被回收。
(在闭包中,父函数被子函数引用,子函数又被外部的一个变量引用,这就是父函数不被回收的原因)
闭包原理
内部函数用了外部函数或者全局中的变量,并将其保存在自己的作用域中,外部一旦引用了这个内部函数,这个被引用的内部函数就独立出来形成闭包无法被销毁。下图中
直接执行依旧是形成了闭包,但是每次都产生一个新的闭包,因为并没有声明变量接收他,每次执行foo()()产生的闭包都漂浮在神秘空间中无法被回收
关于闭包,这里有更详细的解释: www.jb51.net/article/857…
对象
ECMAScript是弱类型语言,使用晚绑定,即解释程序运行前并不知道对象的类型,只需检查对象是否支持属性和方法,这样就允许执行大量的对象操作,而无任何惩罚。
废除对象
把对象的所有引用都设置为 null,可以强制性地废除对象。 例如:
对象类型
本地对象
EvalError,
内置对象
ECMA-262 只定义了两个内置对象,即 Global 和 Math (它们也是本地对象,根据定义,每个内置对象都是本地对象)。
宿主对象
***所有 BOM 和 DOM 对象***都是宿主对象
对象作用域
ECMAScript 只有公用作用域
建议性的解决方法
由于缺少私有作用域,开发者确定了一个规约,说明哪些属性和方法应该被看做私有的。这种规约规定在 属性前后加下划线
关键字 this
关键字 this, 总是指向调用该方法的对象
对象创建方法
这里不展开了,篇幅比较长,给大家两个链接: www.w3cschool.cn/ecmascript/… 这是w3c的。
alvinyuxt.github.io/2016/11/11/… 这个是掘金上点在比较多的,两者都差不太多。