JavaScript核心概念归纳整理

主要包括下面这些:
数据类型、判断方法、执行上下文、变量对象、活动对象原型、原型链作用域、作用域链闭包、垃圾回收机制、this指向、类和模块、继承、函数式编程、同步异步、JS正则表达式、事件模型、Ajax、跨域访问、DOM、BOM 。
数据类型、判断方法ECMAScript的基本数据类型有5种:Undefined、Null、Boolean、Number、String 。
其中Boolean、Number、String属于原始类型 , Undefined、Null属于原始值 。
原始类型代表了各自类型的所有成员 , 原始值则代表了各自特殊类型的唯一成员 。
ECMAScript的复合数据类型有1种:Object(对象类型) 。
Object是一种复合值 , 它将很多值(原始类型/值或者其他对象)聚合在一起 , 通过属性的形式进行访问 。
ECMAScript的特殊对象类型:Array、Function、Math、Date、JSON、RegExp、Error , 每种类型都各自代表一种独立的类 , 不同的类实例拥有不同的类特性以及对应的操作方式 。
ECMAScript常见数据类型划分方式:
1.原始类型、对象类型
2.值类型、引用类型
3.可变类型、不可变类型
4.可拥有方法类型、不可拥有方法类型精确区分数据类型的判断方法:Object.prototype.toString.call
执行上下文JS的执行上下文可以理解为当前代码的执行环境 , 在执行JS程序时 , 每遇到一段JS可执行代码 , 都会创建一个可执行上下文 。JS当中可执行代码分为三种:全局代码、函数代码、eval代码 。所以一段JS程序必定会产生多个执行上下文 , 而JAVAScript引擎则是以堆栈的形式来对其进行管理 , 也就是常说的函数调用栈 。栈底是全局上下文 , 栈顶则是当前正在执行的上下文 。例如:
执行上下文在函数调用栈中的顺序为(自底向上):globalStack => threeStack => twoStack => oneStack
特性
1.单线程
2.同步执行 , 只有栈顶的上下文处于执行中 , 其他上下文需要等待
3.全局上下文只有唯一的一个 , 它在浏览器关闭时出栈
4.函数的执行上下文的个数没有限制
5.每次某个函数被调用 , 就会有个新的执行上下文为其创建 , 即使是调用的自身函数 , 也是如此 。变量对象、活动对象
在介绍变量对象与活动对象前 , 首先我们需要更深入的理解执行上下文的生命周期 , 执行上下文的生命周期分为两个阶段:
第一个阶段是创建阶段 , 每当JS引擎在执行一段可执行代码时 , 都会先进入创建阶段 。该阶段会分别创建变量对象 , 建立作用域链 , 以及确定this的指向 , 作用域链和this指向会在后文阐述 。所谓变量对象就是用于存储在执行上下文中定义的变量和函数声明 , 在当前上下文中每找到一个变量声明 , 就会在变量对象中建立一个同名的属性 , 每找到一个函数声明 , 就会建立一个以函数名命名的属性 , 属性值则为指向该函数所在内存地址的引用 。这些预先建立好的属性以及属性值 , 存储着该上下文中所有的变量数据 , 为后续代码的执行奠定基础 。
第二个阶段是执行阶段 , 当变量对象 , 作用域链 , this指向都建立之后 , 执行上下文会进入到执行阶段 。在该阶段中变量对象会转化为活动对象 , 此时活动对象中的属性都允许被访问 , 并且可以执行其他数据性的操作 。
两者区别:
执行上下文处于创建阶段时 , 变量对象中的属性是不允许被访问的 , 但是在进入到执行阶段后 , 变量对象转化为活动对象 , 并且里面的属性都允许被外界访问 。其实两者都属于同一个对象 , 只是处于执行上下文的不同生命周期而已 。
原型、原型链在JavaScript中 , 每一个对象都会和另一个对象产生关联 , 从另一个对象上继承属性 , 这里所指的另一个对象就是我们耳熟能详的原型 。原型本身也是一个对象 , 其他对象可以通过它实现属性的继承 , 也可以将任何一个对象作为自身对象的原型 。JS中的任何对象都有原型 , 除了原型链顶端的对象:Object.prototype
所谓原型链 , 就是由对象原型所构成的访问链 , 我称之为“原型继承链” 。一个JS对象的原型指向其父类对象 , 而父类对象的原型又指向父类对象的父类对象 , 这种通过原型层层连接起来的关系就是原型链 。


推荐阅读