javascript高级四篇

1:作用域分类
全局作用域,函数作用域

2:作用域作用
隔离变量,不同的作用域下同名变量不会有冲突

3:作用域和上下文的区别
1:
全局作用域之外,每个函数都会创建自己的作用域,作用域在函数定义的时候就已经确定了,而不是在函数调用时。
全局执行上下文是在全局作用域确定之后,js代码马上执行之前创建。
函数执行上下文是在调用函数时,函数体代码执行之前创建
2:
全局作用域是静态的,只要函数定义好了就一直存在,且不会再变化
执行上下文是动态的,在调用函数的时候创建,函数调用完毕时上下文就会释放

4:联系
执行上下文是从属于所在的作用域的,
全局上下文==>全局作用域
函数上下文==>函数作用域

5:作用域链
1:多个上下级关系的作用域的链,它的方向是从上向下(从内到外)
查找变量就是沿着作用域链来查找的
2:查找一个变量的查找规则
在当前作用域下的执行上下文中查找对应的属性,如果有直接返回,否则进入2,在上级作用域的执行上下文中查找对应的属性,如果有直接返回,否则进入3,执行2的相同操作,直到全局作用域,如果还是找不到就会抛出找不到的异常。

6:全局作业域的面试题
在这里插入图片描述
输出10

在这里插入图片描述
第二个会报错,因为找不到

7:循环
在这里插入图片描述
8:如何产生闭包
当一个嵌套的内部函数(子)引入了嵌套的外部函数(父)的变量时,就会产生了闭包。

9:闭包的理解
1:是嵌套的内部函数
2:包含被引用变量的对象

10:产生闭包的条件
1:函数嵌套
2:内部函数引用了外部函数中的数据(变量|函数)

11:常见的闭包
在这里插入图片描述
调用几次外部函数就创建几次闭包。通过return 内部函数名,就将闭包暴露出去了。
在这里插入图片描述
12:闭包的作用
使用函数内部的变量在函数执行完后,仍然存活在内存中(延长了局部变量的生命周期)
让函数外部可以操作到函数内部的数据(变量|函数)

13:函数执行完后,函数内部声明的局部变量是否还存在?
一般是不存在,存在于闭包的变量才可能存在。
如果调用外部函数的时候赋值给一个变量时才会存在。

14:在函数外部能直接访问函数内部的局部变量吗?
不能,但是我们可以通过闭包让外部操作

15:闭包的声明周期
产生:在嵌套内部函数定义执行完成时就产生了(不是在调用)
死亡:在嵌套的内部函数成为垃圾对象时

16:闭包的应用
1:
在这里插入图片描述
在这里插入图片描述

2:
在这里插入图片描述
在这里插入图片描述

17:闭包的缺点
函数执行完后,函数内的局部变量没有释放,占用内存时间会变长
容易造成内存泄漏

18:解决办法
能不用闭包就不用
及时的释放
1:让内部函数成为垃圾对象–>回收闭包

19:内存溢出
一种程序运行出现的错误
当程序运行需要的内存超过剩余的内存时,就抛出内存溢出的错误

20:内存的泄漏
占有的内存没有及时的释放
内存泄漏积累多了就容易导致内存溢出

21:常见的内存泄露
意外的全局变量
没有及时清理的计时器或者回调函数
闭包

22:面试题目
在这里插入图片描述
在这里插入图片描述
这个用了闭包

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值