ES6语法(let和const的用法)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>let/const</title>
</head>
<body>
<!--
ECMAScript 2015
es5 => es6(跨度比较大,为了解决es5中存在的问题) /es7/es8
es5:没有类的概念,利用构造函数来使用类的概念,class(声明的类)
-->
<script>
// es5的例子
// 1.声明变量:
var a = 10;
// 第一种:
function fn(){
console.log(a); //10
}
fn();
// 第二种:
function fn(){
// var a;
console.log(a); //undefined(相当于 var a;但是未赋值,所以为undefined,这里有一个变量作用域的提升)
var a = 100;
console.log(a); //100
}
fn();
// 2.for循环:
for(var i=0;i<10;i++){
console.log("循环",i); //0123456789
}
console.log(i); //10
// es6内容
// 块级作用域
{
let a = 1;
// 声明的变量只在当前块级作用域中生效
}
// 有块级的都有以下的内容:
// function fn(){块级作用域}
// for(){块级作用域}
// if(){块级作用域}
// while(){块级作用域}
// 块级作用域对es5没有作用
{
var b = 10;
let c = 20;
console.log(b); //10
console.log(c); //20
}
console.log(b); //10
// console.log(c); //c is not undefined
// defined出现的情况:没有被赋值定义时
// 循环
for(let j=0;j<5;j++){
console.log(j); //01234
}
// console.log(j); // j is not defined
{
let c = 2000;
console.log(c); //2000
// 和上面的c没有任何作用,他只在次块级作用域起作用
}
// 双层循环(外层循环一次,内部循环五次)
for(let m=0;m<5;m++){
for(let n=0;n<5;n++){
console.log('内部',n);
console.log('第一个循环变量',m);
}
}
{
// 报错:Cannot access 'x' before initialization
// 无法在舒适化之前使用'x'
// console.log(x);
let x = 10;
}
{
var x = 10000;
var x = 20000;
console.log(x); //20000
}
{
// let x = 10000;
// let x = 20000;
// console.log(x); // Identifier 'x' has already been declared
}
/*
let:
1.let声明变量,不能在未声明之前使用;
2.let声明的循环变量,不会造成循环变量的泄露;
3.let声明的变量,不存在变量作用域的提升;
4.let不允许在同一块级作用域重复声明,会报错;
*/
// const 声明常量
{
// const PAI = 3.1415;
// PAI = 100;
// console.log(API); // 报错:Assignment to constant variable.不可以重复赋值
}
{
// const PAI;
// PAI = 3.1415;
// console.log(API); // 报错,Missing initializer in const declaration,必须在声明的同时赋值;
}
{
const PAI = 1000;
console.log(PAI);//1000
}
/*
const:
1.当一个数据,被声明之后,在接下来的代码使用中都不会再改变值得情况下,使用const来声明;
2.const声明常量,必须在声明的同时赋值;
3.const声明的常量,不可以进行修改;
4.其他规则和let一样
*/
/*
顶层对象,在浏览器环境中指的就是window对象
*/
{
var y = 100;
console.log(y); //100
console.log(window.y); //100
function test(){
}
test();
window.test();
// console.log(window)
}
/*
es6规定使用 var和function声明的全局变量,属于顶层对象。
用let和const声明的不属于顶层对象的范围。
*/
{
let w = 10;
console.log(window.w); //undefined
}
</script>
</body>
</html>