• 原型和闭包重点


    1、(undefined, number, string, boolean)属于简单的值类型,不是对象。函数、数组、对象、null、new Number(10)都是对象。他们都是引用类型。判断一个变量是不是对象非常简单。值类型的类型判断用typeof,引用类型的类型判断用instanceof。

    2、一切(引用类型)都是对象,对象是属性的集合对象都是通过函数创建的。

    3、每个函数function都有一个prototype,即原型。这里再加一句话——每个对象都有一个__proto__,可成为隐式原型。每个对象都有一个__proto__属性,指向创建该对象的函数的prototype。Object.prototype确实一个特例——它的__proto__指向的是null,切记切记!

    4、访问一个对象的属性时,先在基本属性中查找,如果没有,再沿着__proto__这条链向上找,这就是原型链。

    5、变量、函数表达式——变量声明,默认赋值为undefined;this——赋值;函数声明——赋值;这三种数据的准备情况我们称之为“执行上下文”或者“执行上下文环境”。函数每被调用一次,都会产生一个新的执行上下文环境。函数在定义的时候(不是调用的时候),就已经确定了函数体内部自由变量的作用域。

    5、在函数中this到底取何值,是在函数真正被调用执行的时候确定的,函数定义的时候确定不了。如果函数作为对象的一个属性时,并且作为对象的一个属性被调用时,函数中的this指向该对象。注意,如果fn函数不作为obj的一个属性被调用,如果fn函数被赋值到了另一个变量中,并没有作为obj的一个属性被调用,那么this的值就是window,this.x为undefined。其实,不仅仅是构造函数的prototype,即便是在整个原型链中,this代表的也都是当前对象的值。

    6、执行全局代码时,会产生一个执行上下文环境,每次调用函数都又会产生执行上下文环境。当函数调用完成时,这个上下文环境以及其中的数据都会被消除,再重新回到全局上下文环境。处于活动状态的执行上下文环境只有一个。其实这是一个压栈出栈的过程——执行上下文栈。

    7、要到创建这个函数的那个作用域中取值——是“创建”,而不是“调用”,切记切记——其实这就是所谓的“静态作用域”。这个一步一步“跨”的路线,我们称之为——作用域链。

    8、但是你只需要知道应用的两种情况即可——函数作为返回值,函数作为参数传递。有些情况下,函数调用完成之后,其执行上下文环境不会接着被销毁。这就是需要理解闭包的核心内容。

  • 相关阅读:
    Rolling Hash(Rabin-Karp算法)匹配字符串
    vim下单行长文本的时候卡顿解决办法
    设置vim的默认工作路径同时与自动设当前编辑的文件所在目录为当前工作路径不冲突
    Careercup
    Careercup
    Careercup
    Careercup
    Careercup
    Careercup
    Careercup
  • 原文地址:https://www.cnblogs.com/ckf1988/p/5552441.html
Copyright © 2020-2023  润新知