Skip to content

Latest commit

 

History

History
43 lines (22 loc) · 2.85 KB

原理.原型.md

File metadata and controls

43 lines (22 loc) · 2.85 KB

2、原型、原型链是什么?

参考:1、https://juejin.im/entry/57f765a7da2f60004f841d98

简述:原型简单的讲,就类似于 Java 中的父类(因为 Javscript 中没有类的概念,用 proto),对象的原型可以理解为对象的父对象(prototype)

原型链是什么?

简述: 可以类比类的继承链条,子类继承父类,即每个对象的原型往上追溯,一直到 Object 为止,组成的这条链条

作用和特性:当前对象中访问变量, 如果没有则根据其proto指针指向其的 prototype 对象(也就是父类)获取,如果获取不到,在往上层查找,一直到 Object 的原型, 找不到返回 undefined

注意点:

1、原型链的最后两层是 Object,Object 的proto指针指向的是 null

2、任意对象(包括 function)都有原型的,并指向其原型(类似于父类概念)的proto,对象是没有 prototype 属性只有指向其原型的私有变量proto, 方法有 prototype、proto 属性

3、由于proto 是运行环境私有属性,所以最好不要用,推荐用 es6 的新方法,Object.getPrototypeOf()方法来获取对象的原型

3、什么是作用域(也就是执行上下文)和作用域链?

作用域:作用域就是变量和函数的可访问范围,在 js 中分为全局作用域(又称:全局执行上下文)、局部作用域(局部执行上下文)

全局作用域:最外层定义的函数和最外层的变量以及未用 var 声明的都拥有全局作用域

局部作用域:局部作用域一般只在固定的代码片段内可访问到,一般就是函数中定义的函数和方法

全局和局部作用域的关系: 在函数体内,局部变量的优先级高于同名的全局变量。

注意点:

如果在函数内声明的一个局部变量或者函数参数中带有的变量和全局变量重名,那么全局变量就被局部变量所覆盖

作用域链:当代码在一个环境中执行时,会创建变量对象的一个作用域链(scope chain)。

作用域链的用途,是保证对执行环境有权访问的所有变量和函数的有序访问。

作用域链的前端,始终都是当前执行的代码所在环境的变量对象。如果这个环境是函数,则将其活动对象(activation object)作为变量对象。活动对象在最开始时只包含一个变量,即 arguments 对象(这个对象在全局环境中是不存在的)。作用域链中的下一个变量对象来自包含(外部)环境,而再下一个变量对象则来自下一个包含环境。这样,一直延续到全局执行环境;全局执行环境的变量对象始终都是作用域链中的最后一个对象

#### 5js 中的垃圾回收机制是什么样的?

参考1