菜鸟入门第一天——JS作用域

164 阅读2分钟

问:什么是作用域?

答:一段程序代码中所用到的名字并不总是有效/可用的,而限定这个名字的可用性的代码范围

通俗点讲就是一个独立的领地,让领地中变量不会外泄、暴露出去。

问:JS中有哪些作用域呢?

答:以ES6为例,总共有全局作用域、函数作用域、块级作用域

问:什么是全局作用域?

答:全局全局,就是代码中任何地方都能访问到的对象拥有的作用域就是全局作用域

//声明一个全局变量
let name = "我是全局作用域"
function foo() {
    console.log(name);
}
foo()

输出结果为:

image.png

问:什么是函数作用域?

答:函数作用域是在函数内产生的一个较小的作用域,在这个作用域里面声明的变量,只能在这一块区域使用。

function foo() {
  var a = 10; 
  console.log(a); 
}

foo(); 
console.log(a); 

输出结果为:

image.png

运行结果报错,因为变量 a 在函数 foo 内部声明,并且只能在函数内部访问,当我们在函数外部尝试访问变量 a 时,会报 not defined,因为该变量在函数外部是不可见的。

问:什么是块级作用域?

答:是ES6中一个新的作用域,凡是带{}都是块级作用域,if(){} for(){} 对象{} 都是块级作用域。块级作用域并不影响var声明的变量,还是具有‘变量提升’的特性

    function foo() {
    if (1) {
      var x = 1;  // 定义函数作用域
      let y = '块级作用域';  // 定义块级作用域
    }
  
    console.log(x); 
  }
  
  foo(); 

输出结果为:

image.png

总结

JavaScript作为一门弱类型的动态语言,有3种不同的作用域,分别是全局作用域、函数作用域、块级作用域,每个作用域都会有不同效果,希望您读完我这个文章会对你了解作用域带来帮助。