# JavaScript中的名词概念

# 什么是作用域?

变量存在的范围。可分为全局作用域和函数作用域,ES6新增块级作用域。

# 什么是闭包?

闭包就是能够读取其他函数内部变量的函数。

  • 闭包的形式:函数内部定义函数
  • 本质上闭包就是将函数内部和外部连接起来的一座桥梁

闭包的作用:

  • 可以读取函数内部变量
  • 让这些变量始终保持在内存中,即闭包可以使得它诞生的环境一直存在。
  • 封装对象的私有属性和私有方法

# 什么是构造函数?

用于构造(生成)实例的一个函数,使实例拥有构造函数内定于的属性和方法。

# 什么是实例对象?

实例对象就是通过new 构造函数生成的,拥有构造函数内定于的属性和方法的一个对象。

# 什么是this?

就是属性或方法当前所在的对象,指向当前运行环境(对象)

# 什么是原型?

每个函数都有一个prototype属性,指向一个对象,该对象称为原型对象。

# 什么是原型链?

所有对象都有自己的原型对象,由于原型对象也是对象,因此它也有自己的原型,这就会形成一个原型链。

最顶层的原型是Object.prototype。

读取对象属性时,JS会先在对象自身上找,找到就直接返回,如果找不到,会到原型上找,如果还是找不到,就会去原型的原型上找,最终会到最顶层的Object.prototype上找,还是找不到就会返回undefined。

# 什么是constructor?

prototype原型对象都有一个constructor属性,默认指向prototype对象所在的构造函数。

# 什么是包装对象?

包装对象指的是将原始类型(数字、字符串、布尔值)进行实例化。