作用域:
作用域就是变量和函数的可访问范围,控制着变量和函数的可见性与生命周期。
在JavaScript中变量的作用域有:全局作用域和局部作用域。
全局作用域:任何函数的内部都可以访问的到。
局部作用域:只能在函数内部访问。
作用域链:
作用域链是一个对象列表,用来检索各个变量对象中的变量和函数,这样可以保证执行环境有权访问哪些变量和函数。
匿名函数:(function () {}) ()
变量提升:
举例:var a = 2;我们习惯将var a = 2;看做是一个声明,而实际上javascript引擎并不这么认为。它将var a和a = 2看做是两个单独的声明,第一个是编译阶段的任务,而第二个则是执行阶段的任务。
这意味着无论作用域中的声明出现在什么地方,都将在代码本身被执行前首先进行处理,可以将这个过程形象地想象成所有的声明(变量和函数)都会被“移动”到各自作用域的最顶端,这个过程被称为提升。
闭包的特征:
1.局部变量:在函数中定义有共享意义的局部变量(定义成全局变量会造成全局污染);
2.内嵌函数:在函数中申明有内嵌函数,内嵌函数对函数中的局部变量进行访问;
3.外部使用:函数向外返回此内嵌函数,外部可通过此内嵌函数持有并访问申明在函数中的局部变量,而此变量在外部是通过其他路径无法访问的;
闭包:形式函数中套了一个函数,内层函数可以访问外层函数中的局部数据。
this绑定规则:默认绑定,隐式绑定,显式绑定,new绑定。
this绑定优先级:new绑定,显式绑定,隐式绑定,默认绑定。
this指向:
情况1:如果一个函数中有this,但是它没有被上一级的对象所调用,那么this指向的就是window(这里需要说明的是在js的严格版中this指向的不是window)。
情况2:如果一个函数中有this,这个函数有被上一级的对象所调用,那么this指向的就是上一级的对象。
情况3:如果一个函数中有this,这个函数中包含多个对象,尽管这个函数是被最外层的对象所调用,this指向的也只是它上一级的对象。
情况4:this永远指向的是最后调用它的对象,也就是看它执行的时候是谁调用的。(举例var j = o.b.fn;执行的是j(),所以指向的是window,执行o.b.fn();指向情况3)。
语言类型:string,number,boolean,null,undefined,object。
内置对象:String,Number,Boolean,Object,Function,Array,Date,RexExp,Error。
类:类意味着复制。传统的类被实例化时,他的行为被复制到实例中,类被继承时,行为也会复制到子类中。
多态:(在继承链的不同层次名称相同但是功能不同的函数)看起来是从子类引用到父类,但本质上引用的其实是复制的结果。