,但是循环结束后,它并没有消失,释放,而是泄露成了全局变量,这样会造成全局变量的污染
解决办法:
若使用let定义变量,则变量不会被提升置作用域顶部,它只会在它定义的块级作用域内生效
注意事项
使用let...在全局范围内都是有效的,所以每一次循环,新的i值都会覆盖旧值,导致最后输出的是最后一轮的i的值
如果使用let,声明的变量仅在块级作用域内有效,最后将输出8
02
块级声明及块级(词法)作用域
正因为Es5...,i是0,迭代执行成功,然后执行i++,因为这条语句试图修改常量,因此抛出错误,如果后续循环不会修改该常量,那么可以使用const声明
比如:for-on或for-of循环中使用const时的行为与使用...const,只有确实需要改变变量的值时,则使用let,因为大部分变量的值在初始化后不应该在改变,而预料外的变量的值的改变会产生很多Bug
如果希望在全局对象下定义变量,可以使用var
总结
块级作用域绑定的...,然后才能使用(暂存性死区)
对于变化的变量,则使用let,而不改变的定义变量,使用const声明,如:for循环体中,使用const定义初始化值变量,那么就会报错,因为常量不能被改变
而for..in