ES6中var/let/const的区别

最近无聊看了一下前端面试题,看到不少地方要求列出var/let/const的异同,自己整理一下,算加深一下记忆。

1.作用域

var为全局作用域,而let和const为局部作用域(仅作用在大括号内),举个简单例子:

1 if(true){
2    var a = 1
3    let b = 2
4    const c = 3
5 }
6 console.log(a) //a打印出来为 1
7 console.log(b) //b is not defined
8 console.log(c) //c is not defined

2.变量声明

var和let可以仅声明不赋值,但是const必须赋值,否则报错

var a = 1 //正确
let b = 1 //正确
const c = 1 //正确

var d //正确 d打印为undefined
let e //正确 e打印为undefined
const f //错误

3.是否可修改

var和let声明的变量,可随意修改;const声明的变量,若为基本数据类型不可修改,若为引用数据类型,可修改值,不可修改引用地址。

Vue父子组件传值,子组件中的props为const声明的变量,若为数组,清空数组的时候可以用array.length = 0(若为array = []会报错,因为修改了引用地址);

var a = 1;
a =2;
console.log(a) // 2

let b = 1;
b = 2;
console.log(b) // 2

//c为基本数据类型不可修改
const c = 1;
c = 2; //报错

//d为引用数据类型
const d = [1,2,3];
d.push(4);//对引用数据类型进行值的修改可进行
console.log(d);// [1,2,3,4]
d = [1,2,3,4,5] //对引用数据类型进行地址修改,报错

4.是否可重复声明

var可以重复声明;let和const不可重复声明.

var a = 1;
var a = 2; //不报错,可重复声明
console.log(a); // 2

//let 和 const 情况相同
let a = 3;//报错,上面已经声明过a(var 声明的也不可以)
let b = 1;
let b =2; //报错,上面已经声明过b

5.变量提升

var 声明的变量会进行变量提升,但是赋值不提升;let和const声明的变量不会提升。

console.log(a);// a为undefined
var a =1;
console.log(a);// a为1

//let和const情况相同
console.log(b);//报错,提示 b is not defined
let b =1;
console.log(b);// b为1

原文地址:https://www.cnblogs.com/wan-li/p/10299434.html

时间: 2024-10-10 19:41:35

ES6中var/let/const的区别的相关文章

var let const 的区别

Var let const 的区别 1.Var 定义的变量存在变量提升,而了let和const不存在变量提升.即在定义的变量代码上使用该变量,var的会输出undefined,而let的会报错. 2.var不存在暂时性死区,而let存在,只要块级作用域内存在let,它所声明的变量就绑定了这个区域,不在受外部的影响 例如:var tem=123: if(true){ tem='abc';   //报错 ReferenceError,因为在if里声明了let,形成了自己的作用域,外部的访问不到,所以

面试时面试官想要听到什么答案 关于es6中let、const、promise、块级作用域的问题

前言 前面写了一篇关于vue方面问题的面试题(面试时面试官想要听到什么答案(关于一些vue的问题)),感谢大家的阅读和意见,今天整理了一下我面试时经常会问到的一些关于es的问题,写了这篇文章,感谢拨冗翻阅拙作,敬请斧正.因为最近比较忙es6的问题就写了这些,写的比较水了,这些也是我比较常问的还有一些比较碎的内容面试问了但本文未体现只挑选了重点的,class和symbol也是两个重点,因为我了解不深所以就没有去问这两个 - -下面进入正文,本文会列举一些平时面试时问到的问题和答案,并说明我在当时问

es6(var,let,const,set,map,Array.from())

1.变量声明--var,const,let 1.1 var - (全局作用域,局部作用域)会有变量提升 //第一个小例子 <script> var num = 123; function fn(){ console.log(num); // undefined var num = 46; console.log(num) // 46 } fn() </script> //为什么第一个输出值会是undefined,而不是123呢?因为这里存在着变量名的提升,其实上述语句相当于: &l

ES6 中 let 和 const 总结

目录 let const 1. let要好好用 1. 基本用法 2. let声明的变量不存在变量提升 3. TDZ(temporal dead zone)暂时性死区 4. 不允许重复声明 2. 块级作用域 1. 为什么需要块级作用域 2. ES6中实现了块级作用域 3. 块级作用域与函数声明 4. do表达式(仅仅是提案) 3. const(不要忘记立即初始化哦) 1. 基本用法 2. const的本质 4. ES6中声明变量的六种方法 5. ES6对顶层对象属性的改变 1. ES5中顶层对象的

JS ES6中Arguments和Parameters的区别

1.简谈Arguments和Parameters 通常情况下Arguments和Parameters是可以互相使用的,但是在大多数的标准中这两个还是有那么一丢丢的却别的,Parameters(形式参数)指声明函数名和函数体的时候使用的参数,而Arguments(实际参数)指在函数实际调用的时候传入的确定值 1 function demo(a,b){ 2 console.log(a,b); 3 } 4 demo(1,2); 咱们就上面的函数来说,a.b是函数的形式参数,而在函数的调用中1.2是函数

let、var、const的区别

先看let和var: 1. console.log(a); // undefined var a = 3; console.log(a); // Uncaught ReferenceError: Cannot access 'a' before initialization let a = 3; 在当前代码执行之前,首先会把所有带var关键字的进行声明(带function关键字的也会提前声明并且定义),即所谓的变量提升,let则不存在这种情况. ps:项目中创建函数,一般都是基于函数表达式来实现

c与c++中的extern const的区别和联系

最近复习c++,发现了这个东西. c语言里面,我们在一个.c文件中用const定义了一个全局变量后,可以在另一个.c文件中用extern const来引用,但在c++中在链接的时候会报undefined reference错误,这是因为在c语言里面,const全局变量在符号表里面是GLOBAL即全局可见的,而在c++里面却是LOCAL即只能在当前编译模块可见. e.g. 在a.h中: 1 extern const int a; 在a.c中: 1 const int a = 10; 在main.c

ES6中let与const命令详解

阮一峰ES6入门 let 作用域 let命令用来声明变量,但声明的变量只在let命令所在的代码块内有效. { let a = 10; var b = 1; } a // ReferenceError: a is not defined. b // 1 for循环 上图代码中i是var声明的,在全局范围内部有效,所以全局只有一个变量i. 每一次循环,变量i的值都会发生改变,而循环内被赋给数组a的函数内部的console.log(i),里面的i指向的就是全局的i. 也就是说数组a的成员里面的i,指向

ES6 中 export ,export default 区别

1.export与export default均可用于导出常量.函数.文件.模块等: 2.你可以在其它文件或模块中通过import+(常量 | 函数 | 文件 | 模块)名的方式,将其导入,以便能够对其进行使用: 3.在一个文件或模块中,export.import可以有多个,export default仅有一个: 4.通过export方式导出,在导入时要加{ },export default则不需要. export //a.js export const str = "hello es6&quo