您现在的位置是:首页 > Javascript
当前栏目
js作用域链与预解析
2023-02-25 18:27:41 时间
1. 作用域
1.1 全局作用域
在script标签下直接声明的变量或函数,都会在全局作用域下。可以在程序任何地方拿到
1 <script>
2 var a = "全局变量a"
3 let b = "全局变量b"
4 const c = "全局变量c"
5 </script>
1.2 函数作用域
也叫局部作用域,如果一个变量是在函数内部声明的,它就处于函数作用域。这些变量只能在函数内部访问,不能在函数以外去访问。
(函数执行完内部变量就会被js销毁,除非使用闭包)
1function aaa(params) {
2 var bb = "bb";
3}
4
5console.log(bb);//bb is not defined
1.3 块级作用域
只适用于let、const,被这俩关键字定义的变量会产生块级作用域。 大括号之外不能访问,比如if、for循环...
1if (true) {
2 var a = "a";
3 let b = "b";
4 const c = "c";
5}
6
7console.log(a);//"a"
8console.log(b);//b is not defined
9console.log(c);//c is not defined
10
1.4 作用域链
在使用一个变量的时候,首先js会先在当前作用域下去寻找该变量,如果没找到,再到它的上层作用域寻找,以此类推直到找到该变量或是已经到了全局作用域。
1var bb = "bb"; //在这层找到了
2
3(function aaa() {
4 //当前作用域没有,向上层查找
5 console.log(bb);
6})(); //bb
2. 预解析
js运行分为两步:预解析,代码执行
- 预解析:var声明的变量(不赋值)和函数,会被提升到当前作用域最前面
- 代码执行:按照代码书写的顺序从上往下执行
预解析优先级:
函数>变量
因为函数提升是整体提升,变量提升不会被赋值,而是执行到那一步才赋值
相关文章
- JDK中内嵌JS引擎介绍及使用
- 49195,npm最后的疯狂?盘点10款最有前途JavaScript构建工具
- 译文:5个增强Node.js应用程序增强功能
- 4个例子,吃透 JavaScript 实现的二叉搜索树 BST
- Vue中使用XML和JSON格式互转插件
- JDK中Jshell简单使用(JDK9版本以上或者JDK9版本)
- shiro中的JSP标签支持
- Java技术点-json转对象,对象转json
- SpringBoot+SpringDataJpa @Query之 JPQL使用书写模板(模糊查询and条件查询)
- Spring Boot中的Freemarker模版引擎引用css和js的正确姿势
- Node.js解压版的环境配置及相关常用命令
- JSP学习笔记(6)—— 自定义MVC框架
- JSP学习笔记(5)——Servlet、监听器、过滤器、MVC模式介绍
- Jsp学习笔记(4)——分页查询
- APIJSON简单使用
- JSP学习笔记(3)——JSTL 标签库
- JSP学习笔记(1)——Jsp指令、动作元素和内置对象
- JavaScript ES6 Promise对象
- Web前端——JavaScript扩展补充
- Web前端——表单提交和Js添加选项