简单了解一下: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. 全局变量挂载到全局对象:全 ...
随机推荐
- JS的静态类型检测,有内味儿了
我们知道 TypeScript 2.3 以后的版本支持使用--checkJs对.js文件进行类型检查和错误提示. 但是由于 JavaScript 是弱类型语言,在编写代码的时候,是无法检测变量的类型的 ...
- 「Python 编程」编码实现网络请求库中的 URL 解析器
摘要:怎么写出更短的代码并不是这次要讨论的话题.今天我们来研究一下:运行代码的计算机是如何找到目标服务器的? 相信各位 Python 开发者都用过 Requests 库,有些朋友还用过 WebSock ...
- 转:关于JAVA项目中CLASSPATH路径详解
在dos下编译Java程序,就要用到classpath这个概念,尤其是在没有设置环境变量的时候.classpath就是存放.class等编译后文件的路径. javac:如果当前你要编译的Java文件中 ...
- mysql数据库命令
删除一个表: drop table if exists 表名; 在表中插入行: Insert into 表名 values(, , ,) 创建表: Create table 表名( Id int(10 ...
- 自然语言处理(NLP)相关学习资料/资源
自然语言处理(NLP)相关学习资料/资源 1. 书籍推荐 自然语言处理 统计自然语言处理(第2版) 作者:宗成庆 出版社:清华大学出版社:出版年:2013:页数:570 内容简介:系统地描述了神经网络 ...
- git 使用详解(10)-- 远程分支
远程分支 远程分支(remote branch)是对远程仓库中的分支的索引.它们是一些无法移动的本地分支:只有在Git 进行网络交互时才会更新.远程分支就像是书签,提醒着你上次连接远程仓库时上面各分支 ...
- MyBatis更新,删除,插入
UserMapper.java: package com.bjsxt.mapper; import java.util.List; import org.apache.ibatis.annotatio ...
- Geoserver2.15.1 配置自带 GeoWebCache 插件发布 ArcGIS Server 瓦片(附配置好的 Geoserver2.15.1 下载)
之前写过一篇关于 Geoserver2.8.5 版本的部署配置发布 ArcGIS Server 瓦片点击查看,那是下载 Geoserver2.8.5 源码编译,重新打包 jar 来部署配置思路的,版本 ...
- HashMap 实现原理解析
概要 HashMap 最早出现在 JDK 1.2 中,底层基于散列算法实现.HashMap 允许 null 键和 null 值,在计算哈键的哈希值时,null 键哈希值为 0.HashMap 并不保证 ...
- BGA256芯片植球全过程体验(原创)
今天工具到位,迫不亟待,需要对手上的BGA256的FPGA芯片进行植球, 该芯片买来的时候是有球的,只是在焊接后,由于电路板故障或焊接问题,需要拆下来芯片,导致球损失,需要重新植球. 一般植球都是将所 ...