有关于js的几个高级特性
###作用域
1.JavaScript的函数定义是可以嵌套的,每层一个作用域,变量搜索顺序是从内到外
2.无论函数内在什么地方定义了变量,变量都会提前到函数开始,但是直到运行到var时才会被初始化,在此之前都是undefined
3.函数作用域的嵌套关系是定义时决定的,而不是运行时决定的。即 js的作用域是静态作用域
###闭包
闭包:由函数及其封闭的自由变量组成的集合体。
特性:当一个函数返回它内部定义的一个函数时,就产生了一个闭包。闭包不但包括被返回的函数,还包括这个函数的定义函数。 作用: - 嵌套的回调函数:让变量的值始终保持在内存中 - 隐藏对象的细节(实现私有成员):可以读取函数内部的变量 [阮一峰关于闭包的解释](http://www.ruanyifeng.com/blog/2009/08/learning_javascript_closures.html)1 | var name = "The Window"; |
2.bind(有待深入理解啊)
- 永久绑定函数的上下文
- 绑定参数表
3.原型
- 构造函数自身的属性和方法无法被共享,而原型对象的属性和方法可以被所有实例对象所共享。无法被共享带来的影响就是实例化多个对象时,构造函数中的方法就会被调用多次
- 原型链:js分为两种对象:function和object 在万物皆对象的情况下,函数对象也属于对象,所有对象时最终原型都是object.prototype,而function.prototype是所有函数的原型。
每一个函数都有prototype属性,prototype属性指向该函数的原型对象
每一个对象都有__proto__属性,__proto__属性指向该对象的构造函数的prototype属性