目录
  1. 1. 前言
  2. 2. var,let,const
    1. 2.1. var
    2. 2.2. let
    3. 2.3. const
      1. 2.3.1. 不变性
      2. 2.3.2. 可变性
js中var,let,const的作用域

前言

上次说着想再搞个blog来分开记录的,现在想想还是算了,先把东西捡起来拿到offer后有时间再考虑吧。时间不够用啊!!!
花了3天复习完h5+css,css3还没来得及看,期间还发现了以前有些不知道的知识点emmm,收货还是挺大的吧,基础YYDS!
今天开始复习js,看到作用域就还是感觉挺重要的,当初es6也没有完整的看一遍,哎,话不多说来简单谈下作用域。

var,let,const

var

var声明的变量作用域呢跟所处的位置有关,在函数里作用域就仅限于是函数内部,
一旦函数运行完就会把这个变量的内存清除掉,无法访问了也就是局部作用域
而在整个js里声明的,未被函数包含的则是全局作用域,是window对象(所有的对象都是window对象)
所以var的使用情况分2种:1.函数体内:与let类似,局部作用域;2函数外:全局作用域
1.函数内部:
var a = 1;//全局作用域,window对象

function test1() {
console.log(a);//1
}

function test2(){
var a = 2;//局部作用域
console.log(a);//2
test1();
}

test2();

结果是先打印2,再打印1,最后的结果也就是1,
why?
代码最后是执行 test1 函数,先从 test1 函数内部查找是否有局部变量 a,没有变量a,
那么因为js是静态作用域,就根据书写的位置,查找上面一层的代码,也就是 a 等于 1,所以结果会打印 1。

假如js采用动态作用域呢,
执行 test1 函数时,依然是从 test1 函数内部查找是否有局部变量 a。
如果没有,就从调用函数的作用域,也就是 test2 函数内部查找 a 变量,所以结果会打印 2。

2.var有块级作用域么?
{
var x = 1;
}
// 这里可以使用 x 变量

答案是没有

let

let与var的区别就是他的作用域是局部的,块级的({}),看下面的例子
	function varTest() {
var x = 1;
if (true) {
var x = 2; // 两个x是同样的变量。这里的x和前面的x是同一个变量
console.log(x); // 2
}
console.log(x); // 2
}

function letTest() {
let x = 1;
if (true) {
let x = 2; // 两个x是不同的变量,这里采用let,第二个x作用域在if这个代码块中,所以这里的x为2
console.log(x); // 2
}
console.log(x); // 1 退出if的作用域,这里的x是1
}
ps:
{
let x = 1;
}
// 这里不能使用 x 变量

const

不变性

const声明的为伪常量,一般是不变的。也是跟let一样的块级作用域
cnst a = 1;//必须一开始声明时就初始化
a = 2;//报错,因为const一旦声明就不能改变,且不能再次声明,

可变性

但也不是不能变,借用菜鸟的原话

const 的本质: const 定义的变量并非常量,并非不可变,它定义了一个常量引用一个值。
使用 const 定义的对象或者数组,其实是可变的。下面的代码并不会报错:


// 创建常量对象
const car = {type:"Fiat", model:"500", color:"white"};

// 修改属性:
car.color = "red";

// 添加属性
car.owner = "Johnson";
文章作者: ruqiuvy
文章链接: https://github.com/yiyeruqiuvy/2022/04/11/js%E4%B8%ADvar%EF%BC%8Clet%EF%BC%8Cconst%E7%9A%84%E4%BD%9C%E7%94%A8%E5%9F%9F/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 一夜入秋非生之所
打赏
  • 微信
  • 支付寶

评论