理解JavaScript的原型和闭包

1.undefined、number、string、boolean属于简单的值类型,不是对象。函数、数组、null、对象都是对象,都是引用类型。

2.对象都是通过函数创造的。

3.每个函数function都有一个prototype,即原型;每个实例对象都有一个_proto_,可称为隐式原型,指向创建该对象的函数的prototype。每个原型对象又有一个constructor属性指向他们各自的函数。注意,Object.prototype的_proto_指向的是null。

4.instanceof运算符的第一个变量是一个对象,暂时称为A,第二个变量一般是一个函数,暂时称为B。即 A instanceof B。

判断规则:沿着A的_proto_这条线来找,同时沿着B的prototype这条线来找,如果两条线能同时找到同一个引用,即同一个对象,那就返回true,如果找到终点了还未重合,则返回false。

5.JavaScript中的继承是通过原型链来体现的。

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

6.JS代码在真正运行之前会先做一些准备工作,包括:变量声明,默认值为undefined;this赋值;函数声明;

这三种数据的准备情况我们称之为“执行上下文”或者“执行上下文环境”。

如果代码段是函数体,那么在以上基础还需要:参数赋值;arguments赋值;自由变量的取值作用域赋值;

7.函数每被调用一次,就会产生一个新的执行上下文环境;

8.执行上下文环境:在代码执行之前,把将要用到的所有变量都事先拿出来,有的直接赋值了,有的先用undefined占个空;

9.在函数中this到底取何值,是在函数被真正调用的时候确定的,函数定义的时候无法确定。

10.this的取值,分一下几种情况:

当函数作为构造函数时,其中的this就代表它即将new出来的对象。注意,如果直接调用构造函数而不是使用new,则情况就不一样了,此时this指向的是window。

如果函数作为对象的一个属性并且作为对象的一个属性被调用时,函数中的this指向该对象。注意,如果对象的函数属性不是作为对象属性被调用的,this就不会指向该对象了。比如,被赋值给了另一个变量中,直接调用该变量,此时this指向的是window。

函数用call或者apply调用。当一个函数被call或者apply调用时,this就是传入的值。

在全局环境下,this永远是指向window的。

在整个原型链中,this代表的当前对象。

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

12.JavaScript中,除了全局作用域之外,只有函数可以创建作用域。

13.函数作用域在函数定义时就已经确定了,而不是等待函数调用时才确定。

14.作用域只是一个“地盘”,一个抽象的概念,其中没有变量,要通过作用域对应的执行上下文环境来获取变量的值。同一个作用域下,不同的调用会产生不同的执行上下文环境,继而产生不同的变量的值。

15.自由变量:在A作用域中使用的变量X,却没有在A作用域中声明,对于A作用域来说,X就是自由变量。

16.当在某个作用域中找不到某个变量时,要到创建这个函数的那个作用域中去找,注意这里说的是创建而不是调用。作用域链就是以上过程的重复执行,直到找到变量,或者已经到全局作用域还未找到为止。

17.闭包:闭包就是能够读取其他函数内部变量的函数,是将函数内部与函数外部连接起来的桥梁。

18闭包应用的情况:函数作为返回值和函数作为参数传递;

闭包的用途:可以读取函数内部的变量、让变量始终保存在内存中;

19.如果某个闭包使用了其他函数的变量,则在这个闭包的执行上下文环境销毁之前,其使用的变量的函数的执行上下文环境就不能被销毁。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值