var 重新赋值,重新定义,作用域 属于:function scope;

let 声明的变量只在 let 命令所在的代码块内有效,Block scope。

const 声明一个只读的常量,一旦声明,常量的值就不能改变。

 

传送门:https://www.runoob.com/w3cnote/es6-let-const.html

对比一:作用域:var:function scope,所以以下代码,var totalPrice 为全局;let,const为块级作用域,只作用在if条件范围内;

var price = 10;
var count = 10;
if (count > 5) {
var totalPrice = 10 * 0.9;
console.log(`var totalPrice:${totalPrice}`);
}
console.log(totalPrice);//成功输出9 这里的totalPrice是全局变量,可以访问

  

var price = 10;
var count = 10;
if (count > 5) {
let totalPrice = 10 * 0.9;
console.log(`let totalPrice:${totalPrice}`);
}
console.log(totalPrice);//会出错误(Uncaught ReferenceError: totalPrice is not defined) 这里的totalPrice是let块级变量,外部无法访问

对比二:作用域:以下代码只有声明的类型不一样,var 支持重新赋值,totalPrice会被重新赋值,而let中的totalPrice,第一个为全局变量, 第二个只被作用在块级中,所以最终输出0

        var price = 10;
var count = 10;
var totalPrice = 0;
if (count > 5) {
var totalPrice = 10 * 0.9;
console.log(`var totalPrice:${totalPrice}`); //9
}
console.log(totalPrice); //9

  

        var price = 10;
var count = 10;
let totalPrice = 0;
if (count > 5) {
let totalPrice = 10 * 0.9;
console.log(`let totalPrice:${totalPrice}`); //9
}
console.log(totalPrice); //0

  

对比三:var,let,const:定义,赋值,区别如下,注意const为对象时,虽然不能被重新赋值,但是可以修改其属性值

        var name = "sun";
var name = "sun2"; //可以被重新定义
name = "liping"; //可以被重新赋值
console.log(`var name:${name}`); //var name:liping let age = 10;
//let age = 20; //会出错,不能被重新定义
age = 22; //可以被重新赋值
console.log(`let age:${age}`);//let age:22 const sex = "女";
//const sex = "男"; //会出错,不能被重新定义
//sex = "男"; //会出错,不能被重新赋值
console.log(`const sex:${sex}`); //女

  

第四点:控制属性的改变:

      const product = {
name :"手机",
price:5999
}; //可以修改属性
product.price = 8999; console.log(JSON.stringify(product));//{"name":"手机","price":8999} //如果不想product被改变则:(使用freeze方法冻结该对象)
const product2 = Object.freeze( {
name :"手机",
price:5999
});
product2.price = 9999; console.log(JSON.stringify(product2));//{"name":"手机","price":5999}

  

第五点:实际应用过程的细节

    for (var i = 0; i < 5; i++) {
console.log(`var i is ${i}`); //这里会输出 0,1,2,3,4 setTimeout(function () {
console.log(`var i is ${i}`); //这里会输出 5个 5 }, 1000);
} console.log(`i is ${i}`); //会输出5 console.log(`---------------解决setTimeout输出0-4的数字------------------------------`); for (let i = 0; i < 5; i++) {
console.log(`let i is ${i}`); //这里会输出 0,1,2,3,4 setTimeout(function () {
console.log(`let i is ${i}`); //这里会输出 0,1,2,3,4 }, 1000);
}

  

第六点:同理解析:当执行a[1]方法时,i 已经=3了,所以都输出3,如果想要输出1,2,3可改类型为let

        var a = [];
for (var i = 0; i < 3; i++) {
a[i] = function () { console.log(i) }
}
a[1](); //3
a[2](); //3

第七点:当块级元素

       var a = 10;
if (1) {
a = 100; //当块级元素包含let声明,给a赋值,只在当前块找a
console.log(a);//所以这里会报错
let a = 1;
console.log(a);
}

  

第八点:变量提升:

        console.log(abc);//undefined  ,变量提升,实际解析:var abc; console.log(abc);abc=10;
var abc = 10; //console(num);//会出错
let num = 10; //console.log(filename);//会出错
const filename = "abc.txt";

  

写在最后:以上只是说明用法,随手百度就能了解,原理后续再作研究

简单了解一下:var 、let、const的更多相关文章

  1. let、var、const区别(表格比较)

    let.var.const区别(表格比较): 区别项 let var const 作用域 块级作用域 全局作用域或函数作用域 块级作用域 是否有变量提升 无 有 无 是否可重复声明 不可 可以 不可 ...

  2. let、var、const声明的区别

    前言 看了方应杭老师的一篇解释let的文章,对JavaScript中的声明有了深刻的理解,这里也就有了总结一下JavaScript中各种声明之间区别的这篇文章. JavaScript中变量声明机制 首 ...

  3. var let const 的区别

    Var let const 的区别 1.Var 定义的变量存在变量提升,而了let和const不存在变量提升.即在定义的变量代码上使用该变量,var的会输出undefined,而let的会报错. 2. ...

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

    // es5的语法与es6的语法区别 // var let const console.log(name);//undefine,不会报错,因为变量声明会提到作用域的最前面 var name=&quo ...

  5. var和const和let的区别

    简述: 1.前端的变量申明,可以用到var,ES6的const(衡量)/let(变量) 2.在ES5用的都是var,到ES6之后,也就是2015年开始出现const/let. var 不会报错,有声明 ...

  6. var let const的一些区别

    var let const 都是来定义变量的. var let 作用域有些区别. const 类似于java中的常量的概念.即:只能给一个变量赋值一次,即指定一个引用. 举例来说: function ...

  7. javascript中var let const三种变量声明方式

    javascript中var let const三种变量声明方式 1.var  ①var表示声明了一个变量,并且可以同时初始化该变量. ②使用var语句声明的变量的作用域是当前执行位置的上下文:一个函 ...

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

    1.变量声明--var,const,let 1.1 var - (全局作用域,局部作用域)会有变量提升 //第一个小例子 <script> var num = 123; function ...

  9. let、var、const用法区别

    1.var var 声明的变量为全局变量,并会进行变量提升:也可以只声明变量而不进行赋值,输出为undefined,以下写法都是合法的. var a var a = 123  2.let let 声明 ...

  10. 浅谈JS中 var let const 变量声明

    浅谈JS中 var let const 变量声明 用var来声明变量会出现的问题: 1. 允许重复的变量声明:导致数据被覆盖 2. 变量提升:怪异的数据访问.闭包问题 3. 全局变量挂载到全局对象:全 ...

随机推荐

  1. NAT的三种类型

    一.静态NAT 内部本地地址一对一转换成内部全局地址,相当内部本地的每一台PC都绑定了一个全局地址,即使这个地址没有被使用,其他的电脑也不能拿来转换使用,这样容易造成IP地址的资源浪费,一般是用于在内 ...

  2. Python开发GUI工具介绍,实战:将图片转化为素描画!【华为云技术分享】

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/devcloud/article/detai ...

  3. 目不识丁的我使用Python编写汉字注音小工具

    一万点暴击伤害 人懒起来太可怕了,放了个十一充分激发了我的惰性.然后公众号就这么停了半个月,好惭愧- 新学期儿子的幼儿园上线了APP,每天作业通过app布置后,家长需要陪着孩子学习,并上传视频才算完成 ...

  4. zabbix配置

    一:安装zabbix服务端 1.部署准备 命令:iptables -F     #关闭防火墙命令:systemctl stop firewalld    #关闭防火墙 设置解析,自建yum源 命令:c ...

  5. luogu P2704 [NOI2001]炮兵阵地

    题目描述 司令部的将军们打算在NM的网格地图上部署他们的炮兵部队.一个NM的地图由N行M列组成,地图的每一格可能是山地(用"H" 表示),也可能是平原(用"P" ...

  6. 报错 Please make sure you have the correct access rights and the repository exists (git 添加ssh密钥 )

    1.设置Git的user name和email $ git config --global user.name "wubaiwan" $ git config --global u ...

  7. IOS原生方法实现二维码生成与扫描

    转自:http://www.jianshu.com/p/d6663245d3fa 二维码的生成有好多第三方库,如Z-Xing.但是为了控制安装包的大小,或者并不需要其他的一些额外的功能,用系统的方法即 ...

  8. 洛谷 题解 P1600 【天天爱跑步】 (NOIP2016)

    必须得说,这是一道难题(尤其对于我这样普及组205分的蒟蒻) 提交结果(NOIP2016 天天爱跑步): OJ名 编号 题目 状态 分数 总时间 内存 代码 / 答案文件 提交者 提交时间 Libre ...

  9. 如何打造个人km知识管理系统

    经常有朋友会遇到这样一种情况,在网络中看到一篇很好的文章,但后来因为关键字想不起来,结果怎么都搜索不到.还有些朋友虽然平时也会做一些记录,把有用的资料进行保存,但他们往往将保存的资料分散在不同的地方, ...

  10. tensorflow tf.train.Supervisor作用

    tf.train.Supervisor可以简化编程,避免显示地实现restore操作.通过一个例子看. import tensorflow as tf import numpy as np impor ...