本文目录一览:
- 1、JavaScript ES6中var,let,const分别什么时候使用
- 2、var、let、const三者之间的区别和联系有哪些?
- 3、let和const的引入会对js编程带来哪些改变
- 4、var、function、let、const变量提升
- 5、js const定义函数?
JavaScript ES6中var,let,const分别什么时候使用
如果在条件循环语句里用var申明的变量在循环外也可以引用,let 则不行,希望变量是局部变量时使用let最好,var一不小心就申明了全局变量了,const用来声明静态变量的 ,变量值不会改变的变量
var、let、const三者之间的区别和联系有哪些?
var 是es5之前当然之后也可以这么写的写法!
es5之后又细分出了let(变量)const(常量)这两种类型。
但是const的出现也表示js脚本开始走向类如java,c#那种重型语言的编写方式,明确细分了常量和变量。
然后let对比var都是变量(var没有变量常量一说,但ES5之后其行为与let类似),但是,var和let有很大区别,简单理解就是作用域变了,如果你学过后端语言的话,你会知道,使用变量需要先声明在赋值后使用的流程,let继承了这种流程,而var没有,在代码里的体现就是,let只在定义它的上一个大括号内及其所有子方法体起作用,比如方法中定义let则出了这个方法就没法使用到这个let,同级别的两个方法,可以各自定义一个同名let变量。
其实说起来,你可能没有感觉,因为你用var的时候可能也是这么用的,但是let是被严格约束可以这么用,而var其实是无约束的,在某些时候是乱窜。也就是你看到的是你想看的,但它里面的运行不是你所想的!简单来说,var的作用域是混乱的,同父子作用域下var可以被多次定义。而let不能!
const也是继承了后端的常量思想,一旦定义,无法被修改,也不能被修改,也不应该被修改,如果你想改变以上3条中的任何一条,都不要使用const!所以const一般用于存储固定不变的内容,比如系统信息里的名字啊,系统风格啊,审批号啊之类的,不是不能变,而是应该通过人为干预手写的方式来改变其值,不能不应通过代码的方式来赋值(初值除外)!
let和const的引入会对js编程带来哪些改变
1. let 命令
① 在js中是没有块级作用域的,var 声明的变量作用域是整个函数体,而let可以起到这一作用
{ let a = 1; var b = 2; } console.log(b); // 2 console.log(a); // a is not defind
② 而let可以起到这一作用啊在js中变量和函数的声明会提升到当前作用域最顶部执行。这样就会出现问题。
var a = []; //函数和变量i会最先进行声明,同时全局变量i经过for循环赋值为10 for (var i = 0; i 10; i++) { a[i] = function () { console.log(i); }; } console.log(i);//10 a[6]();//10
而使用let就解决了这个问题
for (let i = 0; i 10; i++) { a[i] = function () { console.log(i); }; } a[6](); //6
③ let不像var那样,会发生“变量提升”现象
console.log(a); // a is not defined let a = 1;
④ let不允许在相同块级作用域内,重复声明同一个变量
// 报错 { let a = 10; var a = 1; } // 报错 { let a = 10; let a = 1; }
2. const 命令
① const也用来声明变量,但是声明的是常量。一旦声明,常量的值就不能改变。
② 与let相同也不能在相同块级作用域内重复声明同一个变量。
③ const的作用域与let命令相同:只在声明所在的块级作用域内有效。
const PI = 3.1415; console.log(PI); // 3.1415 //PI = 3; // Assignment to constant variable.(不能给常量赋值) //const PI = 3.1;// Identifier 'PI' has already been declared
var、function、let、const变量提升
我是从这两篇文章的阅读中,做出了自己的总结,如果不明白的话可以看看这两篇文章:
变量提升情况:
变量提升概念:
js引擎在执行过程中变量的生命周期分为三个阶段: 注册、初始化、赋值
var、funciton、let、const的生命周期:
var 在注册阶段初始化是一起的,会被赋值为 undefined ,所以变量提升,打印出的是 undefined
function 在注册阶段初始化、执行都一起了,所以函数不管写在哪里都可以直接调用
let 在注册阶段和初始化是解耦的,只是创建了但是并未初始化,所以出现了暂时性死区,打印出的是 'x is not defined'
const 的生命周期与let一样,只不过没有赋值阶段
js const定义函数?
const用来定义常量的,初始化之后不能修改,let定义变量的,初始化之后还可以被修改