Javascript作用域 (局部作用域和全局作用域) 详细介绍
作用域是当前的执行上下文,值和表达式在其中“可见”或可被访问。
常见的作用域为:
全局作用域:脚本模式运行所有代码的默认作用域
函数作用域:由函数创建的作用域
局部作用域:用对象{}包着(一个代码块)创建出来的作用域
在
了解作用域之前先看一下全局变量和局部变量
-
全局变量
1、在全局作用域下声明的变量叫做 全局变量(在函数外部定义的变量)2、全局变量在全局(代码的任何位置)下都可以使用;全局作用域中无法访问到局部作用域中的变量。
以下我们用var创建的就是全局变量:
<script>
var value = 66;
function method(){
console.log(value);
}
method();
console.log(value);
</script>
全局变量会提升但并不会赋值:所以 在创建之前log是undefined 的
亿点小知识:变量提升和上文提到触发时间有关。我们知道,var 和 function 声明的变量可以在声明前访问,这就是因为变量提升的缘故。
<script>
console.log(value); // undefined
var value = 66;
console.log(value); // 66
</script>
-
局部变量
1、在局部作用域下声明的变量叫做局部变量(在函数内部定义的变量)2、局部变量只能在函数内部使用,在局部作用域中可以访问到全局变量。
在函数的内部创建变量也是局部变量:
<script>
function method(){
var value = 66;
console.log(value); // 66
}
method();
console.log(value); //value is not defined
</script>
全局作用域和局部作用域的区别
- 全局作用域
全局作用域中的变量称为全局变量,可以在任何作用域内访问。有两种全局变量:
1.全局声明变量是普通变量,在最顶级由 const、let 和 class 声明的变量。
2.全局对象是存储在全局对象中的属性
亿点小知识:所有创建的变量都会作为 window 对象的属性保存
<script>
var value = 66; // 在整个全局都可以获取到 value
function method(){
console.log(value); // 全局方法内部也可以获取到 value
}
method();
</script>
- 局部作用域
作用域对变量来说,可以简单理解为程序能够访问到变量的范围,超过作用域的就无法访问。
{
// 外面这个 a 作用域,可以访问变量 a
const a = 0;
console.log(a); // 0
{
// 里面这个 b 作用域,可以访问 a、b
const b = 1;
console.log(a); // 0
console.log(b); // 1
}
}
// 最外面的作用域 不能访问 a,b
console.log(a); // 报错:Uncaught ReferenceError: a is not defined
- 函数作用域
在函数内部定义的变量,就是局部作用域。函数作用域内,对外是封闭的,从外层的作用域无法直接访问函数内部的作用域
function method(){
let value = '内容';
}
console.log(value ) //报错:ReferenceError:value is not defined
以上就是局部作用域和全局作用域感谢大家的阅读
如碰到其他的问题 可以私下我 一起探讨学习
如果对你有所帮助还请 点赞
收藏谢谢~!
关注收藏博客 作者会持续更新…