JS基础学习Day3——作用域+预解析

目录

1.什么是作用域?

2.全局作用域和局部作用域的效率问题

3.作用域链

4.什么是预解析?

一个实例检验知识点理解是否到位:


1.什么是作用域?

作用域是指代码能有效执行的范围,它可以提高程序的可靠性并减少命名冲突。

其分为全局作用域和局部作用域两个部分,常见的全局作用域即在js标签内书写的内容和在js文件中书写的内容,局部作用域即在函数内部编写的内容。

注意:函数中通过var声明变量,但已经赋值的变量作用域在全局,也就是说,整体的文件这个变量的值都是你赋值的内容。通过下图代码应该可以理解这个意思。

这个sum并没有通过var sum的方式提前定义,而是在函数fn内直接给他赋值为10,但此函数前后输出的sum的值都为10。但是,此种情况只适用于为通过表达式定义的函数,如函数定义如下图则会报错。

其实造成这个结果的主要原因还是在于下文提到的预解析机制。看了就懂了。

2.全局作用域和局部作用域的效率问题

全局作用域的内容在浏览器关闭的时候被删除,而局部变量的内容在相关代码执行完毕后便会销毁,占用的内存相对较少。

3.作用域链

内部函数在查找外部函数变量时采用链式结构,简单来说就是就近原则,定义的变量距离哪个值更近便会采用哪个。

4.什么是预解析?

js引擎把js里面所有定义的变量var和function提到当前作用域的最前面的操作叫做预解析。

预解析分为变量预解析(变量提升)和函数预解析(函数提升),变量提升只提升定义而不会提升通过赋值构造的变量,函数提升不会提升通过表达式定义的函数,从第一点涉及到的示例应该可以分析出来。

一个实例检验知识点理解是否到位:

思考一下图中的代码结果是什么呢?

下面来解释一下这个实例。

首先,根据我们的预解析机制可以将此段代码换个顺序,如下图。

所以结果如下:

本文章中涉及的知识点参考自B站黑马程序员视频:

10-JavaScript作用域_哔哩哔哩_bilibili

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值