一文搞定js作用域 var、const、let区别

前言:首先说下作用域,两种:全局作用域、函数作用域。es6时多了一个作用域:块级作用域。一起来看下吧~

1、全局作用域:

var a = 1   //声明一个a

window.a   // 1

function test(){
console.log(a)
}
test()    // 1

console.log(a)  //  1

这就是全局作用域,只要声明了,全局的任何地方都可以拿到,所以就叫全局作用域。

2、函数作用域

函数作用域包括:定义在函数内的变量,只作用于函数内部,也就是说别的地方拿不到。(重点,跟闭包有很大关系,先不讲闭包)

函数作用域:

function test(){
  var bb =11
}
console.log(bb)   //报错  bb is not defined

验证完成,上面函数内用var声明的变量,在函数外面直接拿不到了,说明声明的变量只作用在函数内。

3、es6的块级作用域{} + let/const:

我们先看下es6之前:

if(true){
 var aaa = 123
}
console.log(aaa)  // 123

{
 var b = 2
}
console.log(b)    //  2

可以看到上面的es6之前通过var声明的变量,有明显的弊端啊!
举个栗子:我的英文实力水平有限,在许多块级元素声明变量时候可能会导致重复,要知道,var声明的东西可以再次声明的并且改变原本数据类型的,那就会把我原先的变量给覆盖了。
有因必有果,为了有更好更清晰的定义于是**es6的块级作用域const、let应运而生。

块级作用域

很好理解,用{ }包裹的就属于就属于块级作用域,例如if、switch、for语句中,使用const、let声明变量就属于块级作用域

if(true){
const  test = 1234
}
console.log(test)   // test is not defined

if(true){
let   test2 = 1234
}
console.log(test2)   // test2 is not defined

区别
const声明的是一个常量
let声明的是一个变量 (变量就是数据类型可变的)

let a = 1
a = {}
a   // {}
const b = 1
b = {}     //  报错

以上内容为个人理解,可能不够标准表述,但是方便理解与记忆,错误之处留言指出~~~😊

温馨提示:看完此文可以和闭包一起食用

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容