ES6对比ES5,增加let 和const
let:
var 在块级作用域的声明会作用到全局
let在块级作用域的声明只在块级作用域生效
ES5和ES6在函数内声明的变量作用域都是局部的(函数内)
详细说明见代码:
//*************************ES5和ES6相同点****************************//
//1.全局变量:
var carName = "Volvo";
// 这里可以使用 carName 变量
function myFunction() {
// 这里也可以使用 carName 变量
}
//说明:全局变量在 JavaScript 程序的任何地方都可以访问。
//2.局部变量
//在函数内声明的变量作用域是局部的(函数内)
// 这里不能使用 carName 变量
function myFunction() {
var carName = "Volvo";
// 这里可以使用 carName 变量
}
// 这里不能使用 carName 变量
//*************************ES6新增****************************//
//块级作用域(Block Scope)
//var关键字
{
var x = 2;
}
// 这里可以使用 x 变量
//let关键子
{
let x = 2;
}
// 这里不能使用 x 变量
//说明:在 ES6 之前,是没有块级作用域的概念的。ES6 可以使用 let 关键字来实现块级作用域。
//let 声明的变量只在 let 命令所在的代码块 {} 内有效,在 {} 之外不能访问。
几个例子:
重新定义变量:
//重新定义变量
//使用 var 关键字重新声明变量可能会带来问题。在块中重新声明变量也会重新声明块外的变量:
var x = 10;
// 这里输出 x 为 10
{
var x = 2;
// 这里输出 x 为 2
}
// 这里输出 x 为 2
//使用let
var x = 10;
// 这里输出 x 为 10
{
let x = 2;
// 这里输出 x 为 2
}
// 这里输出 x 为 10
循环作用域:
//var
var i = 5;
for (var i = 0; i < 10; i++) {
// 一些代码...
}
// 这里输出 i 为 10
//let
let i = 5;
for (let i = 0; i < 10; i++) {
// 一些代码...
}
// 这里输出 i 为 5
全局作用域:
在 JavaScript 中, 全局作用域是针对 JavaScript 环境。在 HTML 中, 全局作用域是针对 window 对象。使用 var 关键字声明的全局作用域变量属于 window 对象,
var carName = "Volvo";
// 可以使用 window.carName 访问变量
let carName = "Volvo";
// 不能使用 window.carName 访问变量
使用 let 关键字声明的全局作用域变量不属于 window 对象
let总结:
对比var关键字,let关键字声明在全局作用域,局部变量,块级作用域,循环中都只作用于它所在的代码范围,且不能重置变量和变量提升
const :
const总结:类似java final关键字,不可修改其本身引用地址,但可以修改其引用的中的值,
作用域和let类同
写代码中声明全局变量,尽量使用var,局部作用域使用let或者const
下一篇:JS学习(二) ==和===