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将本不属于当前作用域的代码,添加到当前作用域中并执行。

相关推荐
m0_5261194019 分钟前
pdf文件根据页数解析成图片 js vue3
前端·javascript·pdf
sorryhc1 小时前
手写一个Webpack HMR插件——彻底搞懂热更新原理
前端·javascript·前端工程化
xiaoxiao无脸男1 小时前
three.js
开发语言·前端·javascript
木易 士心1 小时前
Vue 自定义指令详解
javascript·vue.js·ecmascript
前端Hardy1 小时前
HTML&CSS:高颜值交互式日历,贴心记录每一天
前端·javascript·css
千码君20162 小时前
React Native:使用vite创建react项目并熟悉react语法
javascript·css·react native·react.js·html·vite·jsx
HYI2 小时前
vue3 作用域插槽下不能通过ref获取多个实例的坑
javascript·vue.js
进阶的鱼2 小时前
注意!使用props给子组件传参需要多想一步
前端·javascript·react.js
古夕2 小时前
微前端跨应用中通用前端业务模块的实现
前端·javascript·vue.js
AndyLaw2 小时前
<a>标签下载文件 download 属性无效?原来问题出在这里
前端·javascript