一.全局作用域
- 变量的声明 直接在script中声明就是全局变量 与window属性挂钩
复制代码
1
2
3console.log(window.a); //undefind 因为a提升到了顶部,赋值还在原位置,所以等于undefind var a = 1 console.log(window.a); //1 window可省略
- 注意:let const 不与window挂钩 指向undefind
- 函数的声明
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13foo() //Function foo 函数提升到了顶部 function foo(){ console.log('Function foo'); } foo() //Function foo foo2() //foo2 is not function 因为foo2提升到了顶部,赋值还在原位置所以等于undefind var foo2 = function(){ console.log("Function foo2"); } foo2() //Function foo2
二,函数作用域
- 在函数内部声明的变量又叫局部变量
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16(function(){ --------直接声明函数--------- asc() //123456 直接声明函数会提升到函数作用域顶部 function asc(){ console.log("123456"); } asc() //123456 ----------赋值声明函数---------- asc2() // asc2 is not function //因为asc2 提升到了函数作用域顶部 var asc2 = function(){ console.log("123456789"); } asc2() // 123456789 }())
- 注意,如果变量提升和函数提升同时在的话 函数优先
三,块级作用域
- 抛开let var const 在块内声明变量
复制代码
1
2
3
4
5
6
7
8console.log(b);//b is not defined { console.log(b);//b is not defined b = 3 console.log(b); //3 } console.log(b); // 3
- 当抛开const var let 环境的时候 块内默认声明的变量必须执行完代码块的内容才会有效 window才会有b这个属性
- 块级作用域变量的声明
复制代码
1
2
3
4
5
6console.log(a); //undefined 重新声明个var a = undefined { console.log(a); //undefined a提升到了块级作用域顶部 赋值留在原位置 var a = 1 } console.log(a); // 1 为全局a赋值
- 块内定义的变量会被提升到全局 也会提升到块级作用域顶部 重新声明个关键次 赋值undefined,执行完块内变量后重新赋值
- 问题来了,下面一句代码很诧异
复制代码
1
2
3
4console.log(a); //undefind { function a(){} }
- 输出
undefined
还记得块内的默认变量吗?它如果这样子写会报错的,但是函数声明就不会,因为正如阮一峰老师那篇文章所说
最后
以上就是大意音响最近收集整理的关于超易懂全局作用域 函数作用域 块级作用域一.全局作用域二,函数作用域三,块级作用域的全部内容,更多相关超易懂全局作用域内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复