简单了解一下:var 、let、const
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的更多相关文章
- let、var、const区别(表格比较)
let.var.const区别(表格比较): 区别项 let var const 作用域 块级作用域 全局作用域或函数作用域 块级作用域 是否有变量提升 无 有 无 是否可重复声明 不可 可以 不可 ...
- let、var、const声明的区别
前言 看了方应杭老师的一篇解释let的文章,对JavaScript中的声明有了深刻的理解,这里也就有了总结一下JavaScript中各种声明之间区别的这篇文章. JavaScript中变量声明机制 首 ...
- var let const 的区别
Var let const 的区别 1.Var 定义的变量存在变量提升,而了let和const不存在变量提升.即在定义的变量代码上使用该变量,var的会输出undefined,而let的会报错. 2. ...
- ES6和ES5变量声明的区别(var let const)
// es5的语法与es6的语法区别 // var let const console.log(name);//undefine,不会报错,因为变量声明会提到作用域的最前面 var name=&quo ...
- var和const和let的区别
简述: 1.前端的变量申明,可以用到var,ES6的const(衡量)/let(变量) 2.在ES5用的都是var,到ES6之后,也就是2015年开始出现const/let. var 不会报错,有声明 ...
- var let const的一些区别
var let const 都是来定义变量的. var let 作用域有些区别. const 类似于java中的常量的概念.即:只能给一个变量赋值一次,即指定一个引用. 举例来说: function ...
- javascript中var let const三种变量声明方式
javascript中var let const三种变量声明方式 1.var ①var表示声明了一个变量,并且可以同时初始化该变量. ②使用var语句声明的变量的作用域是当前执行位置的上下文:一个函 ...
- es6(var,let,const,set,map,Array.from())
1.变量声明--var,const,let 1.1 var - (全局作用域,局部作用域)会有变量提升 //第一个小例子 <script> var num = 123; function ...
- let、var、const用法区别
1.var var 声明的变量为全局变量,并会进行变量提升:也可以只声明变量而不进行赋值,输出为undefined,以下写法都是合法的. var a var a = 123 2.let let 声明 ...
- 浅谈JS中 var let const 变量声明
浅谈JS中 var let const 变量声明 用var来声明变量会出现的问题: 1. 允许重复的变量声明:导致数据被覆盖 2. 变量提升:怪异的数据访问.闭包问题 3. 全局变量挂载到全局对象:全 ...
随机推荐
- 在flink中使用jackson JSONKeyValueDeserializationSchema反序列化Kafka消息报错解决
在做支付订单宽表的场景,需要关联的表比较多而且支付有可能要延迟很久,这种情况下不太适合使用Flink的表Join,想到的另外一种解决方案是消费多个Topic的数据,再根据订单号进行keyBy,再在逻辑 ...
- su和sudo的区别与使用【华为云技术分享】
版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/devcloud/article/detai ...
- luogu P1908 逆序对 |树状数组
题目描述 猫猫TOM和小老鼠JERRY最近又较量上了,但是毕竟都是成年人,他们已经不喜欢再玩那种你追我赶的游戏,现在他们喜欢玩统计.最近,TOM老猫查阅到一个人类称之为"逆序对"的 ...
- Java修炼——FileInputStream和FileOutputStream
文件字节流FileInputStream是读文件内容 有一下五个方法 1) abstract int read( ); 2) int read( byte b[ ] ); 3) int read( b ...
- 小程序如何支持使用 async/await
下载 regenerator-runtime npm i regenerator-runtime 如何使用 在小程序中,不认识 node_modules 文件夹,无法通过以下方法来直接找到包文件 im ...
- ARTS-S 获取子线程返回值注意事项
#include <stdio.h> #include <stdlib.h> #include <pthread.h> #include <unistd.h& ...
- 【JS】374- 重学 this 关键字
为什么要学习this关键字 1. 面试会问啊!总有一些面试官喜欢问你一段不可能这么写的代码.看一道经典且古老的面试题(学完本文后,文末会有一道更复杂的面试题等着你哦!) 代码如下: let a = 5 ...
- js prop方法
添加和删除属性 $("button").click(function(){ var $x = $("div"); <!--添加属性--> $x.pr ...
- ubuntu16.04没有办法使用CRT,或者SSH工具的解决办法
首先要明确一点,ubuntu16.04是默认没有安装SSH工具的 情况1 首先需要切换到root模式,然后在进行安装 设置root密码 sudo passwd 然后 sudo apt-get ins ...
- 一个非常美的FlutterUI组件扩展集:FLUI
项目地址 FLUI 官网 下载 Demo APK 体验 这是一个群内的网友写的,感觉里面的组件风格非常美,封装的挺到位的,在此推荐给大家,具体可以参考学习. 可以学到的知识还是挺多的,组件UI封装可以 ...