1同来学ES6,js中var和let的短平快分歧
先看上边包车型地铁多少个例证:
在react-native中,经常看到用let和const 注明变量。它们是ES陆新增的用来声称变量的法子。它们的用法类似于var,不过和我们所耳熟能详的var注明出来的变量又有点不1样。
let命令:
一、let所注解的变量,只在let命令所在的代码块内卓有功用。
{
let a = 1;
var b = 2;
1同来学ES6,js中var和let的短平快分歧。}
console.log(a) //会报错
console.log(b) //打印2
上边代码中,分别用let和var注脚了多少个变量。然后在代码块之向外调拨运输用那三个变量,结果let表明的变量报错,var注解的变量重返了不错的值。那标志,let注脚的变量只在它所在的代码块有效。
let不容许在平等代码块中,重复注明同一个变量。
function func() {
let a = 10;
let a = 1;
} // 报错
二、不设有变量提高
var命令会爆发”变量提高“现象,即变量可以在表明在此之前运用,值为undefined。可是根据一般的逻辑,变量应该在注明语句之后才方可采取。
let改变了这一气象,为了顺应逻辑,let命令所注解的变量一定要在申明后选取,不然报错。
console.log(aa); // undefined
var aa = 2;
console.log(bb); // 报错
let bb = 2;
地点代码中,变量aa用var命令注脚,会发生变量提高,aa是存在的,不过并没有值,所以输undefined。变量bb用let命令注明,不会时有发生变量升高。在申明它前边,变量bb是不存在的,那时假使用它,就会报错。
const命令:
1、const声明一(Wissu)(Karicare)个只读的常量。1旦声明,常量的值就不可能更改。
const x = 5;
x = 3;//错误
const评释的变量不得转移值,那意味着,const1旦证明变量,就必须即刻初阶化,不可能留到以往赋值。
const的功用域与let命令相同:只在宣称所在的块级功效域内有效。
const申明的常量,也与let壹样不可重复证明。
ES陆 添加的let和const命令很广泛,作者觉着最器重的天性正是那一个。
Thanks♪(・ω・)ノ。
自小编的民用微信公众号“美貌微阅读”(微信号”jcwyd201陆”)[不是订阅号,正是多个阅读调换的小平台],没时间阅读的能够来看一下,本人写的某些阅览知识点总括,希望能对大家全部帮助~涉及经济政治法律理财规划种种地点的图书
let
留存块级功用域:
(1)外层效率域取不到内层成效域的变量
(二)内层功效域可以定义外层成效域的同名变量。
所注明的变量,只在let命令所在的代码块内有效
if(true){
let a = “123”;
console.log(a); //123
}
console.log(a); //ReferenceError a is not undefined
for循环还有多个特别之处,正是设置循环变量的那有个别是二个父功效域,而循环体内部是多个独自的子作用域
for(let i=0;i<3;i++){
let i=’abc’;
console.log(i);
}
// abc// abc// abc
地点代码不易运营,输出了 叁回abc。那标志函数内部的变量i与循环变量i不在同三个成效域,有些独立的功效域。
不设有变量进步:在变量证明在此之前运用,都以会报错的。在此之前的var注脚的变量可以变量进步,在变量申明此前运用,值为
undefined。可是采纳let注解的变量,一定要在let表明之后
暂行死区:在代码块(块级功效域)内部存款和储蓄器在let命令,它所申明的变量,就“绑定”那些区域,不再受外界影响。
例子:
4858美高梅,var temp = 123;
if(true){
temp = ‘aaa’; //Reference Error
let temp;
}
因为在块级功用let
评释了三个局地变量,导致这么些变量绑定了那一个块级做呀用于,所以在let证明变量在此之前,对temp
赋值会报错。 (代码块内,使用let命令注脚变量在此之前,该变量都不可用)
~~~分割线~~~
在代码块内,使用let命令评释变量在此之前,该变量都以不可用的。那在语法上,称为“一时半刻性死区”(temporal
dead zone,简称 TDZ)
if(true){
// TDZ开始
tmp=’abc’; // ReferenceErrorconsole.log(tmp); // ReferenceError
let tmp; // TDZ结束console.log(tmp); //
undefinedtmp=123;console.log(tmp); // 123}
不允许再一次评释
let不一致目的在于同等的功效域内,重复申明同3个变量。
// 报错
functionfunc(){
let a=10;
var a=1;
}
// 报错
function func(){
let a=10;
let a=1;
}
function func(arg) {
let arg; // 报错
}
function func(arg) {
{
let arg; // 不报错
}
}
1.
const
扬言一个只读的常量。1旦表明,常量的值就无法更改。
const一旦注解就非得登时起始化,不能够留到今后赋值
与let相同的是:
只在阐明所在的块级作用域内一蹴而就
有一时死区(必须在注解之后才能应用)。
const命令注解的常量也不可能提升。
const评释的常量,不可重复注明。
var a = 99; // 全局变量a
f(); // f是函数,虽然定义在调用的后面,但是函数声明会提升到作用域的顶部。
console.log(a); // a=>99, 此时是全局变量的a
function f() {
console.log(a); // 当前的a变量是下面变量a声明提升后,默认值undefined
var a = 10;
console.log(a); // a => 10
}
// 输出结果:
undefined
10
99
let变量是ES陆中新增的扬言变量的方法,它至关心注重要不外乎以下要点
2.
一.仅在此时此刻块级成效域内有效
{
var i = 9;
}
console.log(i); // 9
二.不存在变量进步
3.
三.不允许再一次证明
{
let i = 9; // i变量只在 花括号内有效
}
console.log(i); // Uncaught ReferenceError: i is not defined
1、仅在脚下块级成效域内卓有成效
计算:在ES6中起先用let来定义块级作用域变量,let未有变量的升级换代,用let注解的变量须要必须等let注明语句执行之后,该变量才能使用不然会报Uncaught
ReferenceError 错误,而且let变量无法开始展览重复表明。
var声明的变量在任何职责都足以访问到,而let注明变量的一大特征正是只有在脚下功能域内才能访问。上边是三个例子:
{ var a = 1;
let b = 2;
{ var c = 3;
console.log(b);——–>1
}
console.log(c); ——–>2
}
console.log(a);——–>3console.log(b);——–>4
地点的例子中,一可见平常调用变量b,而2会报错。那表明上层的功用域不能够访问内层let方法定义的变量,而内层能够访问外层let定义的变量。三方可健康运作,因为var证明的变量在哪儿都能够访问的到。比较之下四就会报错,因为在外围功能域内并不存在变量b,变量b仅在块级成效域中选拔let方法申明过。
2、不设有变量升高
var申明的变量,不论申明在任何任务,都能被访问到,那正是var的变量升高。而let注明的变量,只还好证明后调用,不然会报错。
console.log(a);——–>1
console.log(b);——–>2
var a = 10;
let b = 20;
{
console.log(a);——–>3
let a = 30;
}
上面的代码中,一常规调用,因为变量a是var评释的,存在变量进步。而2会报错,因为b是let注脚的,在宣称此前对其进展调用,会油不过生变量b还未定义的错误。
在一个块级成效域内,let申明的变量优先。由此在三中,尽管外部已经宣示了变量a,不过由于在这之中又用let表明了变量a,由其余部var评释的变量a在那么些职能域内无效。在那么些功能域中,又存在let变量的调用在申明在此以前,因而发生喝二壹如既往的荒谬。
三、不一样意再度注解
var表明的变量,借使再一次申明同三个变量,前边证明的变量值会覆盖前边注解的变量值。可是。let注明的变量分歧意被重新注解,不然会报错。
var a = 10;
let b = 20;
let a = 30; ——>3
let b = 40; ——>4
上边的代码中,三和四会报相同的失实。因为三和肆选用let表明变量,并且在注脚let变量在此之前,相同的变量名都已经被var大概let证明过了,因而会产出重复表明变量的荒谬。
如上就是ES陆中let表明变量的首要性知识点。
什么都懂一些,生活才多彩些。一起读书学知识吧~