为什么要学习 ES6
每一次规范的诞生意味着语言的欠缺,性能的增强,javascript 自身也有一些令人不称心的中央
- 变量晋升个性减少了程序运行时的不可预测性
- 语法过于涣散,实现雷同的性能,不同的人可能会写出不同的代码
let 关键字
- let 申明的关键字具备块级作用域,所谓的块级作用域便是一个 {}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>let 申明的变量具备块级作用域 </title>
</head>
<body>
</body>
<script>
if (true) {
let a = 20;
console.log(a); //20
if (true) {
let b = 50;
console.log(b)//50
}
}
console.log(a) //a is not define
</script>
</html>
- let 能够避免循环变量变成全局变量
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>let 能够避免循环变量变成全局变量 </title>
</head>
<body>
</body>
<script>
for(let i =0;i<2;i++){ }
console.log(i) //i is not define
</script>
</html>
- let 申明的变量不会进行变量晋升
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>let 申明的变量不会进行变量晋升 </title>
</head>
<body>
</body>
<script>
console.log(a) // a is not define
let a = 20;
</script>
</html>
- let 申明的变量具备暂存性死区的个性
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>let 申明的变量具备暂存性死区的个性 </title>
</head>
<body>
</body>
<script>
let a = 20;
if(true) {console.log(a)
let a = 30;
}
</script>
</html>
let 面试之 var
此题的关键点:变量 i 是全局的 函数输入的值是全局作用域下的 i
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>let 面试题 </title>
</head>
<body>
</body>
<script>
var arr = [];
for(var i = 0;i<2;i++){arr[i] = function () {console.log(i)
}
}
arr[0]()//2
arr[1]()//2
</script>
</html>
let 面试题之 let\
关键点:函数执行的时候,输入的是上一级循环产生的块状作用域下 i 的值
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>let 面试题 </title>
</head>
<body>
</body>
<script>
let arr = [];
for(let i =0;i<2;i++){arr[i]= function () {console.log(i)
}
}
arr[0]()//0
arr[1]()//1
</script>
</html>
const
const 用来申明常量 常量就是值(内存地址)不能变动的量
- 应用 const 申明的常量具备块级作用域的个性
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>const 申明的常量具备块级作用域的个性 </title>
</head>
<body>
</body>
<script>
if(true){
const a = 10;
if(true) {
const a =20;
console.log(a)//20
}
console.log(a)//10
}
console.log(a)// a is not define
</script>
</html>
- 应用 const 申明的常量必须初始值
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>const 申明的常量必须赋初始值 </title>
</head>
<body>
</body>
<script>
const a;
console.log(a)
</script>
</html>
应用 const 申明的常量值(内存地址)不能更改
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>const 申明的常量值不能更改 </title>
</head>
<body>
</body>
<script>
const arr = [200,300];
arr[0]='hello';
arr[1]='word';
console.log(arr);//['hello','word']
arr = [200,500];
console.log(arr) //TypeError: invalid assignment to const `arr'
</script>
</html>
var let const 的区别?