ES6(2):关于 let、var、const,三者区别

一、var声明的变量会挂载在window上,而letconst声明的变量不会
var a = 521;
console.log(a,window.a);    // 521   521

let b = 521;
console.log(b,window.b);    // 521  undefined

const c = 521;
console.log(c,window.c);    // 521  undefined

在这里插入图片描述

二、同一作用域下letconst不能声明同名变量,而var可以
let name = 'Tom';
let name = 'Jack';
console.log(name);

在这里插入图片描述

const name = 'Tom';
const name = 'Jack';
console.log(name);

在这里插入图片描述

var name = 'Tom';
var name = 'Jack';
console.log(name);

在这里插入图片描述

三、var声明变量存在变量提升,letconst不存在变量提升
console.log(career);  //undefined
var career = '学生';

在这里插入图片描述

console.log(career);
let career = '学生';

在这里插入图片描述

console.log(career);
const career = '学生';

在这里插入图片描述

四、letconst声明形成块作用域,只在代码块内有效
{
	let girl = 'Lili';
}
console.log(girl);

在这里插入图片描述
换成var不报错:

{
	var girl = 'Lili';
}
console.log(girl);

在这里插入图片描述

五、let补充:不影响作用域链
 {
	let school = '尚硅谷';
	function fn(){
		console.log(school);
}
fn();
}

在这里插入图片描述

六、const补充:声明的变量不可修改,而且必须赋初始值
 const a;

在这里插入图片描述

const a = 10;
a = 20;
console.log(a);

在这里插入图片描述

七、let示例
<div class="container">
   <h2 class="page-header">点击切换颜色</h2>
   <div class="item"></div>
   <div class="item"></div>
   <div class="item"></div>
</div>
<style>
   .item {
        width: 100px;
        height: 50px;
        border: solid 1px rgb(42, 156, 156);
        float: left;
        margin-right: 10px;
    }
</style>
<script>
	//获取div元素对象
	let items = document.getElementsByClassName('item');

	//遍历并绑定事件
	for(let i = 0;i<items.length;i++){
	    items[i].onclick = function(){
	        //修改当前元素的背景颜色
	        // this.style.background = 'pink';   // 写法一
	        items[i].style.background = 'pink';  //写法二
	    }
	}
</script>

在这里插入图片描述
  我们可以看到用let是可以实现点击效果的,但是如果改成 var,再用第二种写法 items[i].style.background = 'pink';就不可行了,大家可以试试。
在这里插入图片描述
  这是因为全局变量i出现了问题,改成 var 之后运行的代码其实是这样的,

{
	var i = 0;
}
{
	var i = 1;
}
{
	var i = 2;
}

  三次循环之后,i做了个自增,此时i为3,因为没有块级作用域,所以i一直在全局中存在,可以打印一下i的值,

for(var i = 0;i<items.length;i++){
   items[i].onclick = function(){
        //修改当前元素的背景颜色
        //this.style.background = 'pink';
        items[i].style.background = 'pink';
    }
}
// {
//     var i = 0;
// }
// {
//     var i = 1;
// }
// {
//     var i = 2;
// }
console.log(window.i);

在这里插入图片描述
  故循环完成后,i的值变为了 3 ,此时点击小方块就会执行点击事件,点击事件的函数块儿中找不到items[i]就会去外层函数作用域里找,window下面的i等于3,所以会出现问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值