var和const和let的区别
简述:
1.前端的变量申明,可以用到var,ES6的const(衡量)/let(变量)
2.在ES5用的都是var,到ES6之后,也就是2015年开始出现const/let.
var 不会报错,有声明提升,会显示undefined(一个变量未初始化);
function show(falg){
// var a;//**声明提升,初始化为undefined,函数体(作用域)的最前排
console.log(a);//undefined
if(falg){
var a ="111";
console.log(a); //111
}else{
console.log(a);//undefined
}
}
show(true);
show(false);
var a = "123";
var a = "456";//覆盖,同名,let不会,要报错Identifier 'a' has already been declared(已被声明)。
console.log(a);
const/let访问范围
function show(falg){ // JavaScript引擎在扫描代码发现变量 TDZ暂时性死区(有let申明)
console.log(a);//报错: a is not defined //a 放入(未申明引用报错)
if(falg){//在第134行和第137行的大括号之间,
let a="111";
console.log(a); // 111 //a 移除(已申明引用移除)
}else{
console.log(a);//报错: a is not defined //a 放入(未申明引用报错)
}
}
show(true);
show(false);
const/let不同作用于可同名,同一作用于不可同名;
function show(falg){
let a="222";
// let a="333";//Identifier 'a' has already been declared
console.log(a);// 222
if(falg){
let a="111";
console.log(a); // 111
}else{
console.log(a);// a is not defined
}
}
show(true);
// show(false);
二.var 和 const/let 的区别
1.const/let:声明变量,声明的是局部变量
用途及区别:ES6新增了let命令,用来声明变量,类似于var ,但是声明的变量只在let所在的代码块的内部有效
let不存在变量提升,这个要注意哟
- 暂时性的死区(Temporal Dead Zone),简写为 TDZ:
只要块级作用域里存在let命令,它所声明的变量就绑定这个区域,不在受外部的影响
let 和 const 声明的变量不会被提升到作用域顶部,如果在声明之前访问这些变量,会导致报错:
console.log(typeof value); // Uncaught ReferenceError: value is not defined
let value = 1;
复制代码这是因为 JavaScript 引擎在扫描代码发现变量声明时,要么将它们提升到作用域顶部(遇到 var 声明),要么将声明放在 TDZ 中(遇到 let 和 const 声明)。访问 TDZ 中的变量会触发运行时错误。只有执行过变量声明语句后,变量才会从 TDZ 中移出,然后方可访问。
- 不允许重复声明
内部的数据有了let声明过之后不允许重复声明
for循环的处理
var funcs = [];
for (var i = 0; i < 3; i++) {
//for (let i = 0; i < 3; i++) {
console.log(i);
funcs[i] = (function(i){
return function() {
console.log(i);
}
}(i))
}
funcs[0](); // let输出的结果是0;var输出的结果是3
for (var i = 0; i < 3; i++) {
var c = "123";//一次123
// let c = "123";//三次123
console.log(c);
}
使用let
var funcs = [];
for (let i = 0; i < 3; i++) {
funcs[i] = function () {
console.log(i);
};
}
funcs[0](); // 0
funcs[1](); // 1
funcs[2](); // 2
分解:
(let i = 0) {
funcs[0] = function() {
console.log(i)
};
}
(let i = 1) {
funcs[1] = function() {
console.log(i)
};
}
(let i = 2) {
funcs[2] = function() {
console.log(i)
};
};
let value = 1;
console.log(window.value); //undefined
再比较const和let的区别:
1.const定义衡量:
不可以重新赋值,但是可以给对象的属相重新赋值.
const data = {
value: 1
}
// 没有问题
data.value = 2;
data.num = 3;
报错
data = {}; // X Uncaught TypeError: Assignment to constant variable.(分配恒定的变量)
优点:const 意味着该标识符不能被重新赋值。
让它在代码中的使用尽可能的清晰。使用一个变量对应代表一个东西.
2.let 在定义后可能还会修改,可变,越来越多的被使用在循环和算法上面。
ES6兼容性问题?bable转义成ES5,用例:
需要安装 ES5的bable: npm install babel-core@5
C:\Users\Administrator\node_modules\babel-core
目录里面我们找到babel的浏览器版本browser.js(未压缩版)和browser.min.js(压缩版)
我们把browser.min.js引入(文件位置的路径要确保正确)。并且设置第二个script标签的type为”text/babel”。
babel转义具体实现:
if (false) {
let a = 1;
// var a=1;//如果直接将let改成var,直接编译成 var,打印的结果肯定是 undefined
var _a = 1;//然而 Babel 很聪明,它编译成了内层变量名不一致
}
console.log(a); // Uncaught ReferenceError: a is not defined
// const 的修改值时报错,以及重复声明报错怎么实现的呢?
// 其实就是在编译的时候直接给你报错
var和const和let的区别的更多相关文章
- javascript精雕细琢(一):var let const function声明的区别
目录 引言 一.var 二.let 三.const 四.function 五.总结 引言 在学习javascript的过程中,变量是无时无刻不在使用的.那么相对应的,变量声明方法也如是. ...
- 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 ...
- let、var、const区别(表格比较)
let.var.const区别(表格比较): 区别项 let var const 作用域 块级作用域 全局作用域或函数作用域 块级作用域 是否有变量提升 无 有 无 是否可重复声明 不可 可以 不可 ...
- var let const的一些区别
var let const 都是来定义变量的. var let 作用域有些区别. const 类似于java中的常量的概念.即:只能给一个变量赋值一次,即指定一个引用. 举例来说: function ...
- 【前端面试】(四)JavaScript var let const的区别
视频链接: JavaScript var let const的区别 - Web前端工程师面试题讲解 参考链接: JavaScript 变量 JavaScript Let JavaScript Cons ...
- let、var、const用法区别
1.var var 声明的变量为全局变量,并会进行变量提升:也可以只声明变量而不进行赋值,输出为undefined,以下写法都是合法的. var a var a = 123 2.let let 声明 ...
- var let const区别
var let const 可否同一作用域下声明同名变量 可以 不可以 不可以 声明的变量是否会挂载到window上 会 不会 不会 声明变量是否存在变量提升 存在 不存在(变量必须声明之后才能使 ...
随机推荐
- 第十三章 ReentrantLock 简介
Java 5.0 提供的新的加锁机制:当内置加锁机制不适合时 , 作为一种可选择的高级功能 一个可重入的互斥锁 Lock,它具有与使用 synchronized 方法和语句所访问的隐式监视器锁相同的一 ...
- java list集合运算
list集合运算 import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.I ...
- AndroidStudio配置LitePal
配置,许多书上还有教程都忽略了将LitePal下载下来和拷贝的过程,这里写一个详细的课程 首先,前往GitHub,下载LitePal的包. 然后解压,会看到这个 进入download 自己选个版本,然 ...
- odoo开发笔记--python获取当天时间
取得时间相关的信息的话,要用到python time模块,python time模块里面有很多非常好用的功能,你可以去官方文档了解下,要取的当前时间的话,要取得当前时间的时间戳,时间戳好像是1970年 ...
- Xamarin Forms MVVM实现效果说明
实体对象定义Model2 和Model均可 实现响应效果 public class BaseModel : INotifyPropertyChanged { private bool _select ...
- 使用ServiceStack改造我们的项目
ServiceStack是一个NET环境下的开源框架集合 包括轻量级的Orm框架,数据库访问,Json处理,Redis驱动等多个模块,我们可以按需选择使用 serviceStack.Ormlite s ...
- rpm安装JDK方法
由于版权原因,Linux发行版并没有包含官方版的Oracle JDK,必须自己从官网上下载安装.Oracle官网用Cookie限制下载方式,使得眼下只能用浏览器进行下载,使用其他方式可能会导致下载失败 ...
- MySQL笔记(1)---MySQL体系结构和存储引擎
1.前言 本系列记录MYSQL数据库的一些结构和实现特点,方便查询. 2.基本概念 数据库:物理操作系统文件或者其他形式文件类型的集合.MySQL中数据库文件可以是frm.MYD.MYI.ibd结尾的 ...
- 【从0到1学Web前端】CSS定位问题三(相对定位,绝对定位) 分类: HTML+CSS 2015-05-29 23:01 842人阅读 评论(0) 收藏
引子: 开始的时候我想先要解决一个问题,怎么设置一个div盒子撑满整个屏幕? 看下面的html代码: <body> <div id="father-body"&g ...
- Python基础之好玩的字符串格式化f-string格式
转自白月黑羽 Python3教程 : http://www.python3.vip/doc/tutorial/python/0010/#f-string-格式化 f-string 格式化 f-stri ...