本文是自己总结的,把一些概念写到代码里了,代码可以直接运行。
注释有点多,运行时候注意一下就好了。
let 具备块级作用域 先定义再使用,同一个作用域里不能重复定义同一个变量,不会覆盖会报错
const 常量 定义好了不能改变,声明完必须赋值,没有变量提升
var 只在函数和全局里有作用域,如果重复定义会覆盖,作用域 :全局作用域和函数(局部)作用域
ES6加入块级(局部)作用域{}
<!DOCTYPE html>
<html>
<head>
<title>定义变量</title>
</head>
<body>
<script type="text/javascript">
//1.关于定义声明变量
for (var i = 0; i < 10; i ++) {
}
//alert(i); //弹出10 i为全局变量 污染全局环境
for (let k = 0; k < 10; k ++) {
let k = 'abc';
console.log(k); //输出十次“abc”
//不是重复定义,类似父级作用域,子作用域
}
//alert(k);//报错 k is not defined
var a = 12;
function fn() {
//alert(a);//会弹出undefined 优先用局部 变量提升 var a; alert(a); a = 5;
var a = 5;
}
fn();
let d = 12;
function fnd() {
//alert(d);//d is not defined 暂时性死区 TDZ
let d = 5;
}
fnd();
/*
let 具备块级作用域 先定义再使用,同一个作用域里不能重复定义同一个变量,不会覆盖会报错
const 常量 定义好了不能改变,声明完必须赋值,没有变量提升
var 只在函数和全局里有作用域,如果重复定义会覆盖
作用域 :全局作用域和函数(局部)作用域
ES6加入块级(局部)作用域{}
*/
if (true) {
var b = 1;
let c = 1;
}
//alert(b); 弹出1 因为是全局
//alert(c);//报错 c is not defined
//经典例子
//j用var定义都是3,let就弹出相应的数字
var arr = [];
for (var j = 0; j < 3; j++) {
arr[j] = function() {
console.log(j);
}
}
arr[2]();
</script>
</body>
</html>