Javascript 中var 和Let/const的区别

目前公司要求用Cypress做测试,但是姐姐以前不会呀。怎么办,学呗!

首先打开官网,按照Get started里面的步骤先把环境整起。OK,环境好了,现在开始熟悉该框架的API. 慢慢发现,咦,怎么有我不熟悉的东西(var Let const)。这些是什么玩意,于是百度一波,才发现是JavaScript里面的玩意儿。

为避免遗忘,记录如下:

letconst是 ES6 新增的命令,用于声明变量,这两个命令跟 ES5 的var有许多不同,并且letconst也有一些细微的不同,在认真阅读了阮一峰老师的文档后,发现还是有一些不知道的细节,重新整理了一下。

内容:


varlet/const的区别

1. 块级作用域

2. 不存在变量提升

3. 暂时性死区

4. 不可重复声明

5. let、const声明的全局变量不会挂在顶层对象下面

const命令两个注意点:

1. const 声明之后必须马上赋值,否则会报错

2. const 简单类型一旦声明就不能再更改,复杂类型(数组、对象等)指针指向的地址不能更改,内部数据可以更改。

为什么需要块级作用域?

1. ES5只有全局作用域和函数作用域,没有块级作用域。

2. 这带来很多不合理的场景:

3. 内层变量可能覆盖外层变量

4. 用来计数的循环变量泄露为全局变量

var tmp = new Date();

function f() {

  console.log(tmp); // 想打印外层的时间作用域

  if (false) {

    var tmp = 'hello world'; // 这里声明的作用域为整个函数

  }

}

f(); // undefined

var s = 'hello';

for (var i = 0; i < s.length; i++) {

  console.log(s[i]); // i应该为此次for循环使用的变量

}

console.log(i); // 5 全局范围都可以读到

块级作用域

1.作用域

function f1() {

  let n = 5;

  if (true) {

    let n = 10;

    console.log(n); // 10 内层的n

  }

  console.log(n); // 5 当前层的n

}

2. 块级作用域任意嵌套

{{{{

  {let insane = 'Hello World'}

  console.log(insane); // 报错 读不到子作用域的变量

}}}};

3. 块级作用域真正使代码分割成块了

{

let a = ...;

...

}

{

let a = ...;

...

}

以上形式,可以用于测试一些想法,不用担心变量重名,也不用担心外界干扰

块级作用域声明函数:

在块级作用域声明函数,因为浏览器的要兼容老代码,会产生一些问题!

。。。。

写不完了,文章转载自:https://juejin.cn/post/6844903752139276301

你可能感兴趣的:(Javascript 中var 和Let/const的区别)