0基础学习,深夜写文章,励志进大厂系列,第1天:js作用域

作者喜欢先说结论再解释为什么。

一、js作用域有三种:

1、全局作用域

2、函数作用域

3、块级作用域(es6新增)

二、全局作用域 VS 函数作用域

1、定义在全局作用域的变量,谁都可以访问。

2、定义在函数作用域的变量,只有函数内部才能访问。

三、访问的规则

1、查找一个变量,先从当前的作用域开始查找,如果没有找到,就去上一级作用域查找,直到找到为止,如果一直到全局作用域都没有找到,就会报错。(原理日后讲,今日不适宜)

2、只能由内向外查找,不能由外向内查找。

四、什么是块级作用域?

letconst 声明的变量具有块级作用域({} 就是一个块)

var 声明的变量不具有块级作用域。

五、let const var 区别

1、let const不存在变量提升,var存在变量提升

2、let const 声明的变量不能重复声明,var可以重复声明

3、var 声明的全局变量会被挂载到window对象上,let const 不会

4、const 声明的变量不能修改,但是可以修改对象的属性,let 声明的变量可以修改

直接上案例:(很明显,只有用var声明的变量才有正常的输出,说明用案例一里用var声明的a的没有与{}形成块级作用域,没有违反2.2的规则)

六、有坑的案例

案例一:如果var let const 我一个都不用来声明呢??直接看输出结果

没错,它有输出 为啥??? 在js执行引擎眼里,代码长这样:不写,就当于在全局作用域声明了变量a

案例二:with

看完这份代码,包有人第一反应是,这不是违反了外层不允许访问内层的作用域规则了嘛?? 可是,这是with 为啥?当with 修改对象中不存在的属性对象时,会导致该属性泄露到全局作用域中。

案例三:eval 很明显,str的字符串的值成功被打印

那么?接下来,eval要登场了

为啥?因为eval将本不属于当前作用域的代码,添加到当前作用域中并执行。

相关推荐
薛定猫AI5 小时前
【深度解析】Gemma Chat 本地 AI 编程 Agent:Electron + MLX + 开源模型的离线 Vibe Coding 实战
javascript·人工智能·electron
全栈前端老曹5 小时前
【前端地图】多地图平台适配方案——高德、百度、腾讯、Google Maps SDK 差异对比、封装统一地图接口
前端·javascript·百度·dubbo·wgs84·gcj-02·bd09
笑虾5 小时前
Win10 修改注册表 让鼠标悬停PNG上时 tip 始终显示分辨率
开发语言·javascript·ecmascript
雾岛听风6916 小时前
JavaScript基础语法速查手册
开发语言·前端·javascript
用户2367829801686 小时前
从零实现 GIF 制作工具:LZW 压缩与 Median Cut 色彩量化
前端·javascript
棉猴6 小时前
Python海龟绘图之绘制文本
javascript·python·html·write·turtle·海龟绘图·输出文本
Highcharts.js7 小时前
线形比赛积分增长或竞赛图|Highcharts企业图表代码示列
开发语言·前端·javascript·折线图·highcharts·竞赛图
让学习成为一种生活方式7 小时前
大肠杆菌合成扑热息痛--对乙酰氨基酚--文献精读227
开发语言·前端·javascript
多秋浮沉度华年7 小时前
electron 初始使用记录
javascript·arcgis·electron
竹林8188 小时前
用 wagmi v2 + WebSocket 硬磕 NFT 上架失败:一个前端开发者踩过的实时状态同步坑
javascript·next.js