js基础系列

知识点

从原型到原型链

  • 原型
__proto__: 每个对象都有本身的原型属性,能够叫作隐式原型
prototype: 每个构造函数有本身的原型属性,能够叫作显式原型

那么有一条规则是对象的隐式原型指向构造函数的显式原型,基于这个逻辑就有了下面的原型链示意图
image.pngjavascript

其中构造函数的显式原型也是一个对象,那么应该有其隐式原型指向构造函数的显式原型,这里的构造函数是Object,对应图中下面一部分。
此时会有一个终点java

console.log(Object.prototype.__proto__ === null) // true

解读

在这一部分的概念中关注如下几点
1.constructor
实例的constructor 指向其构造函数es6

function Person() {

}
var person = new Person();
console.log(person.constructor === Person); // true

2.单独说一下Function
按照前面说的 Function 既是构造函数,自己也属于js 对象的范畴
那就应该有Function.__proto__ === Function.prototype浏览器

3.原型链
到这里原型链应该就好理解了,访问实例a的属性,假如没有找到就会去原型里找,就像上面的指向流程异步

做用域

在es6以前只有函数做用域和全局做用域的概念,咱们主要聊的就是函数做用域函数

做用域是指程序源代码中定义变量的区域,javascript 采用词法做用域,函数的做用域在函数定义的时候就决定了,肯定当前执行代码对变量的访问权限。
这一块看下例子便可学习

var scope = "global scope";
function checkscope(){
    var scope = "local scope";
    function f(){
        return scope;
    }
    return f();
}
checkscope();
var scope = "global scope";
function checkscope(){
    var scope = "local scope";
    function f(){
        return scope;
    }
    return f;
}
checkscope()();

明白输出的结果,应该就理解了做用域的定义this

执行上下文栈

在学习异步知识点的时候,咱们知道浏览器是异步单线程,在一次事件循环中会先处理同步事件,入栈出栈,而异步事件会加入到事件队列等待执行。
那这里的执行栈是什么呢?这里涉及到如下概念须要了解spa

  1. 执行上下文

当 JavaScript 代码执行一段可执行代码时,会建立对应的执行上下文prototype

  • 变量对象(Variable object,VO)
  • 做用域链(Scope chain)
  • this

一个个来认识

变量对象: 在当前上下文中定义的变量和函数声明
在具体分析的过程当中分为两步,进入执行上下文和代码执行,对于一个函数明确AO和VO分别是什么。

  1. 做用域链

多个执行上下文的变量对象构成的链表就叫作做用域链,这是在访问变量的时候肯定的,那具体的做用域链由什么组成

相关文章
相关标签/搜索