原型和闭包重点

Posted 菲比寻常的博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了原型和闭包重点相关的知识,希望对你有一定的参考价值。

1、(undefined, number, string, boolean)属于简单的值类型,不是对象。函数、数组、对象、null、new Number(10)都是对象。他们都是引用类型。判断一个变量是不是对象非常简单。值类型的类型判断用typeof,引用类型的类型判断用instanceof。

2、一切(引用类型)都是对象,对象是属性的集合对象都是通过函数创建的。

3、每个函数function都有一个prototype,即原型。这里再加一句话——每个对象都有一个__proto__,可成为隐式原型。每个对象都有一个__proto__属性,指向创建该对象的函数的prototype。Object.prototype确实一个特例——它的__proto__指向的是null,切记切记!

4、访问一个对象的属性时,先在基本属性中查找,如果没有,再沿着__proto__这条链向上找,这就是原型链。

5、变量、函数表达式——变量声明,默认赋值为undefined;this——赋值;函数声明——赋值;这三种数据的准备情况我们称之为“执行上下文”或者“执行上下文环境”。函数每被调用一次,都会产生一个新的执行上下文环境。函数在定义的时候(不是调用的时候),就已经确定了函数体内部自由变量的作用域。

5、在函数中this到底取何值,是在函数真正被调用执行的时候确定的,函数定义的时候确定不了。如果函数作为对象的一个属性时,并且作为对象的一个属性被调用时,函数中的this指向该对象。注意,如果fn函数不作为obj的一个属性被调用,如果fn函数被赋值到了另一个变量中,并没有作为obj的一个属性被调用,那么this的值就是window,this.x为undefined。其实,不仅仅是构造函数的prototype,即便是在整个原型链中,this代表的也都是当前对象的值。

6、执行全局代码时,会产生一个执行上下文环境,每次调用函数都又会产生执行上下文环境。当函数调用完成时,这个上下文环境以及其中的数据都会被消除,再重新回到全局上下文环境。处于活动状态的执行上下文环境只有一个。其实这是一个压栈出栈的过程——执行上下文栈。

7、要到创建这个函数的那个作用域中取值——是“创建”,而不是“调用”,切记切记——其实这就是所谓的“静态作用域”。这个一步一步“跨”的路线,我们称之为——作用域链。

8、但是你只需要知道应用的两种情况即可——函数作为返回值,函数作为参数传递。有些情况下,函数调用完成之后,其执行上下文环境不会接着被销毁。这就是需要理解闭包的核心内容。

 

以上是关于原型和闭包重点的主要内容,如果未能解决你的问题,请参考以下文章

深入理解javascript原型和闭包——一切都是对象

深入理解javascript原型和闭包——一切都是对象

深入理解javascript原型和闭包——一切都是对象

深入理解javascript原型和闭包——一切都是对象 (转载)

1031日重点: 对闭包的理解

JS重点特性——闭包详解