javascript原型与闭包总结

一、闭包

定义:能够读取其他函数内部变量的函数
要点:1. 函数声明的时候,会生成一个独立的作用域
2.同一作用域的对象可以互相访问
3.作用域是在函数定义时就已经确定
用法:1.函数作为返回值
在这里插入图片描述
fn在调用完成后不会被销毁,还在执行上下文栈中,因为bar函数作用域中需要访问max变量。
这里的重点就在于,创建bar函数是在执行fn()时创建的。fn()早就执行结束了,但是fn()执行上下文环境还存在与栈中,因此bar(15)时,max可以查找到。如果fn()上下文环境销毁了,那么max就找不到了。
2.函数作为参数传递
在这里插入图片描述

二、原型链

函数除了和其他对象一样有__proto__属性,还有自己特有的属性----prototype,该对象指向一个包含所有共享的属性和方法的对象
原型链的实质就是继承,访问一个对象的属性时,现在基本属性中查找(通过this和obj.attr挂载到对象上的属性),如果没有,再沿着__proto__这条链向上,这就是原型链。
如,obj1的对象可以使用Object的hasOwnProperty()方法,obj1.proto => Obj1.prototype ; Obj1.protoType.proto => Object.prototype

三、隐式原型

每个对象都有一个隐藏的属性__proto__,这个属性引用了创建这个对象的函数prototype,这个属性不希望被开发者访问,特例:Object.prototype的__proto__指向的是null。
自定义函数(包括Object.proto,Object()也是Function创建的)的__proto__指向Function.prototype

四、执行上下文环境

定义:在执行代码之前,把将要用到的所有的变量都事先拿出来,有的直接赋值,有的先用undefine占个空,即函数调用前的准备工作。
变量、函数表达式—变量声明,默认赋值为undefined;this—赋值window;函数直接赋值,这就是执行上下文环境,即执行前的准备工作。
函数每被调用一次,都会产生一个新的执行上下文环境。因为不同的调用会有不同的参数。函数在定义的时候就已经确定函数体内部自由变量的作用域。函数内部还附加arguments—赋值;自由变量的取值作用域----赋值。当函数调用完成时,这个上下文环境以及其中的数据都会被消除。

五、This的取值

在函数中this到底取何值,是在函数真正被调用执行的时候确定的,函数定义的时候确定不了。
普通函数直接被调用时,其中的this指向window。
当一个函数被call和apply调用时,this的值就取传入的对象的值

六、作用域

定义:js没有块级作用域,只有全局作用域和函数作用域
用处:作用域最大的用处就是隔离变量,不同作用域下同名变量不会有冲突。
与执行上下文环境的关系—同一个作用域下,不同的调用会产生不同的执行上下文环境,继而产生不同的变量的值。作用域是固定不变的,执行上下文环境是函数执行时创建的。
作用域中变量的值是在执行过程中确定的,而作用域是在函数创建时确定的

七、作用域链

在这里插入图片描述
对于fn来说x就是自由变量,在fn函数中,取自由变量x值时,要到创建这个函数的那个作用域中取值,是创建,不是调用。如果变量不存在,就要跨作用域,一直跨到全局作用域为止,这称为作用域链。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值