JS的变量申明
var
- 可以重复声明
- 无法限制修改,即常量
- 没有块级作用域
{}
ES6的变量申明
let
- 不能重复声明
- 变量——可以修改
- 只在块级作用域内有效
const
- 不能重复声明
- 常量——不能修改
- 只在块级作用域内有效
闭包
- 简单说,就是能够读取其他函数内部变量的函数
- 函数执行的时候分配栈,执行结束后会回收栈(GC——垃圾回收)
- 在JS里面
- 底层:栈
- 高层:把函数当作对象处理
- 闭包——不会回收栈
<script>
window.onload=function(){
var aBtn=document.getElementsByTagName('input');
//闭包
//var 没有块级作用域
for(var i=0;i<aBtn.length;i++){
(function (i){
aBtn[i].onclick=function(){
alert(i);
}
})(i);
}
//let 有块级作用域
for(let i=0;i<aBtn.length;i++){
aBtn[i].onclick=function(){
alert(i);
}
}
}
</script>
<body>
<input type="button" value="按钮1"/>
<input type="button" value="按钮2"/>
<input type="button" value="按钮3"/>
</body>