1. 作用域
(1)全局作用域
(2)函数作用域
(3)块级作用域
块级作用域以括号为分隔,一个括号就是一个块级作用域,但是对象不是块级作用域
//常见的块级作用域
for(){}
while(){}
do{}while{}
if(){}
switch(){}
function(){}
2. 自变量的查找与this指向
自由变量的查找,是在函数定义的地方向上级查找不是在执行的地方
区别于this指向,this是在哪儿执行就指向哪儿
3. 闭包(closure)
闭包:定义在一个函数内部的函数,用来读取其他函数内部的变量,用来连接函数的内部和外部
实例:点击三个按钮,分别弹出0,1,2,3
<button class="btn1">1</button>
<button class="btn1">2</button>
<button class="btn1">3</button>
1.原生js:增加一个自我执行的匿名函数,存储变量,形成闭包
// 1.原生js使用闭包
const btn = document.getElementsByClassName('btn1')
for(var i = 0; i < btn.length; i++){
// 增加一个自我执行的匿名函数,存储变量,形成闭包
(function(index){
btn[index].addEventListener('click',() => {
alert(index)
},false);
})(i);
}
2. ES6:利用let块级作用域的特性
// es6利用let块级作用域的特性
const btn = document.getElementsByClassName('btn1')
for(let i = 0; i < btn.length; i++){
btn[i].addEventListener('click',() => {
alert(i)
},false)
}