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. mysql 替换 tab 键 (\t)

    update t_instance set instance_name = replace(instance_name,'\t','') , host_name = replace(host_name ...

  2. 挑战10个最难的Java面试题(附答案)【下】【华为云技术分享】

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

  3. luogu P2345 奶牛集会 |排序+树状数组

    题目描述 约翰的N 头奶牛每年都会参加"哞哞大会".哞哞大会是奶牛界的盛事.集会上的活动很多,比如堆干草,跨栅栏,摸牛仔的屁股等等.它们参加活动时会聚在一起,第i 头奶牛的坐标为X ...

  4. React-Native项目在Android真机上调试

    目录 1.确保你的设备已经成功连接.可以终端输入adb devices来查看: 2.终端运行npm start 开启本地服务,成功后运行react-native run-android来在设备上安装并 ...

  5. hdu4585Shaolin

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4585 题意: 第一个人ID为1,战斗力为1e9. 给定n,给出n个人的ID和战斗力. 每个人必须和战斗 ...

  6. windows程序设计00_HelloWorld

    #include <windows.h> int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR sz ...

  7. 把JSON转换成键值对

    public static Dictionary<string, string> JsonStringToKeyValuePairs(string jsonStr) { char json ...

  8. idea实现简单热部署

    首先我们打开设置tomcat的页面         

  9. windows下tomcat闪退问题(启动失败)

    1. 第一种情况:Java jdk环境变量没配置或配置有问题 java jdk详细的配置过程这里贴一下:https://jingyan.baidu.com/article/6dad5075d1dc40 ...

  10. 5-- String 、StringBulid 、StringBuffer的区别

    String是典型的Immutable(不可变)类,被声明为final class,所有属性都是final的.由于它的不可变性,类似拼接.截取字符串等操作都会产生新的String对象,往往编码中常常对 ...