认识 var、let、const

我们通过声明、初始化、值的可变性、作用域、变量提升以及在工作中如何使用等多个方面来详细了解var、let、const等关键字功能与特点。

声明

var,let:可以先声明,后赋值(初始化),默认值是 undefined
const:不能将声明与初始化单独分开,否则报错,没有默认值。

var:声明的标识符可以被重复声明多次,多次声明进行的都是覆盖操作,
const,let:同一个标识符不能同时声明多次,否则报语法错误。

let variable;
let variable; //Uncaught SyntaxError: Identifier 'x' has already been declared

初始化

var,let:可以先定义再初始化,默认值为 undefined
const:不能将变量的声明与初始分离进行单独操作。

 const variable //Uncaught SyntaxError: Missing initializer in const declaration

值的改变

const:不可以改变值,定义的是不变量。
let,var:定义的变量可以改变值。

const variable = 1;
variable = 2; //Uncaught TypeError: Assignment to constant variable.

作用域

var:不具有块级作用域。
const,let:都具有块级作用域。

for(var a=0;a<3;a++);
for(let b=0;b<3;b++);
a; //3

if(a){
    const c = 0;
}

b; //Uncaught ReferenceError: b is not defined
c; //ReferenceError: c is not defined

标识符提升

var: 定义的变量存在变量提升情况。
const,let:声明的变量都不具有变量提升的情况,否则报错。

console.log(a); //Uncaught ReferenceError: a is not defined
let a = 1;

如何使用?

目前很多浏览器对于 ES6的兼容已经越来越强大了,所以未来只按照 ES5的方式去写代码绝对是不够的,因此从此刻开始,我们要将更多已经成熟并且流行的 ES6新特性加入到我们的代码中,当然,这势必会对现有的规范与编码习惯造成很大的冲击,但是我想,学习一门新技术,技术本身并非全部,而是要将新技术更好的融入现有的工作任务中去,去发现新特性解决问题的本质才是重中之重。

通过对 var,let,const在声明,赋值,作用域等对比,我们可以明显的得出一个使用的限制等级的划分:

var -> let -> const

而在具体的工作中,对我们编写的代码结合上面的限制等级一起进行分析,就不难得出var,let,const在不同地方,不同层面的具体应用了

例如,let相比 var除了具有块级作用域,在全局代码或者是函数代码中letvar并没有很大的区别。但是一旦在全局代码与函数代码中具有块级范围(JS并不具有块级代码),例如,if,for,while,with 等语句时,并在其中通过 var,let 定义了变量,那么情况就会有很大的不同:


function test1(){

  var a = 1;
  let b = 2;
  console.log(a);
  console.log(b);

}

function test2(){

  var a = 1;
  for(let i=0;i<3;i++){
    ;
  }
  console.log(a);
  console.log(i);

}

test1();
test2();

const 相比 var 具有块级作用域,再对比 let ,它的声明与初始化必须同时进行,值一旦初始化便不可改变,所以,const通常用来定义一些全局的常量,例如通过require载入的模块,或者用于全局配置的不变量变量等。

另外需要注意的是,const值如果是一个对象,那么允许修改对象的属性而不允许修改变量本身的值。

const b = {};

b.x = 1;
b.y = 2;

console.log(b);

b = {
    z: 1
};
console.log(b);

总的来说在具体工作中使用,全局不变的量可以用const定义,局部作用域中的块级范围代码可以通过let定义,而其它一般代码依然可以继续使用我们更为熟悉的 var关键字。

时间: 2024-11-10 18:18:46

认识 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(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

var、const、let 的区别

定义变量的三种方式 var.const.let 都可以用来定义变量,但三者之间存在区别. var var 声明变量的时候无需初始化. var 声明的变量可在后面进行修改. var 声明的全局变量可以被函数修改. <!DOCTYPE html> <html> <head> <title></title> </head> <body> <script type="text/javascript">

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

ES6和ES5变量声明的区别(var let const)

// es5的语法与es6的语法区别 // var let const console.log(name);//undefine,不会报错,因为变量声明会提到作用域的最前面 var name="aa"; for(var i=1;i<7;i++){ console.log(i); } console.log(i);//8,不会报错因为var声明的变量没有块级作用域 /** * 总结 var 声明的变量,声明语句会提到作用域的最前面,并且没有块级作用域 */ console.log(

2-新的变量声明方式(var ,let,const)

以前我们在声明时只有一种方法,就是使用var来进行声明,ES6对声明的进行了扩展,现在可以有三种声明方式了. 字面理解ES6的三种声明方式: var:它是variable的简写,可以理解成变量的意思. let:它在英文中是“让”的意思,也可以理解为一种声明的意思. const:它在英文中也是常量的意思,在ES6也是用来声明常量的,常量你可以简单理解为不变的量 --var声明---- var在ES6里是用来升级全局变量的,我们可以先作一个最简单的实例,用var声明一个变量a,然后用console.

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:项目中创建函数,一般都是基于函数表达式来实现

请问微信小程序let和var以及const有什么区别

在JavaScript中有三种声明变量的方式:var.let.const. var:声明全局变量,换句话理解就是,声明在for循环中的变量,跳出for循环同样可以使用. [JavaScript] 纯文本查看 复制代码 ? 1 2 3 4 5 for(var i=0;i<=1000;i++){ var sum=0; sum+=i; } alert(sum); 声明在for循环内部的sum,跳出for循环一样可以使用,不会报错正常弹出结果 let:声明块级变量,即局部变量. 在上面的例子中,跳出fo

var / let / const

1.var在声明所在的函数作用域内有效.  function(){}  let与const都是只在声明所在的块级作用域内有效.{} 2.var与let声明的变量可以改变,值和类型都可以改变,没有限制. const声明的常量不得改变值,这意味着,const一旦声明常量,就必须立即初始化,不能留到以后赋值,且不能重复赋值. const a; // 报错,一旦声明变量,应该立即赋值!! const b = 10; b = 20; // 报错,因为定义常量之后不能重新赋值!! 3.对于复合类型的变量,如

[js高手之路] es6系列教程 - var, let, const详解

function show( flag ){             console.log( a );             if( flag ){                 var a = 'ghostwu';                 return a;             } else {                 console.log( a );                 return null;             }         } 我们从e