新增变量声明
- var全局变量声明(用var定义的全局变量,有时候会污染整个JS的作用域)
- let 局部变量 块级作用域(防止数据污染)
- const 定义变量 定义之后不可修改 块级作用域
var a=123
{
let a="abc"
// var定义a的时候输出的是abc let定义a的时候输出的是123
// let 是定义局部变量
}
console.log(a)
let与const的作用
- 禁止重复声明
- 支持块级作用域
- 控制修改
- 若用var声明的变量:可以重复声明、没有块级作用域,不能限制。
面试常用问题
<button>按钮1</button>
<button>按钮2</button>
<button>按钮3</button>
<button>按钮4</button>
<button>按钮5</button>
<button>按钮6</button>
<button>按钮7</button>
<button>按钮8</button>
<button>按钮9</button>
<button>按钮10</button>
<script type="text/javascript">
var allBtn=document.querySelectorAll("button")
console.log(allBtn)
// 每一个按钮点击输出的都是10
// for (var i = 0; i < allBtn.length; i++) {
// allBtn[i].onclick = function(){
// console.log(i)
// }
// }
// 解决方式1.闭包
for (var i = 0; i < allBtn.length; i++) {
allBtn[i].onclick =(function(index){
return function(){
console.log(index+1)
}
})(i)
}
// 解决方式2.let
for (let i = 0; i < allBtn.length; i++) {
allBtn[i].onclick = function(){
console.log(i+1)
}
}
</script>