js 作用域和闭包
抛出问题
- 说一下对变量提升的理解
- 说明this的集中不同场景
- 创建10个标签,点击时弹出对应的序号
- 如何理解作用域
- 实际开发中闭包的应用
知识点
1 执行上下文
- 范围: 一段
- 全局:变量定义、函数声明
函数: 变量定义、函数声明、this、arguments
console.log(a); // undefined var a = 100;2 this
this 要在执行时才能确定,定义时无法确定
var a = { name: 'A', fn: function(){ console.log(this.name); } } a.fn(); // this === a a.fn.call({name: 'B'}) // this === {name: 'B'} var fn1 = a.fn fn1() // this === window- 作为构造函数执行
- 作为对象属性执行
- 作为普通函数执行
- call apply bind
3 作用域
- 没有块级作用域
- 函数和全局作用域
- 函数作用域在定义是确定
4 作用域链
- 自由变量,当前作用域没有定义的变量
5 闭包
- 函数作为返回值
- 函数作为参数传递
解决问题
1 说一下对变量提升的理解
- 变量定义
- 函数声明
2 说明this的集中不同场景
3 创建10个标签,点击时弹出对应的序号
for(var i = 0; i < 10; i++){
(function ())(i)
a = document.creatElement('a');
a.innerHTML = i + '<br>';
a.addEventListener('click', function (e){
e.preventDefault();
alert(i);
})
}
4 如何理解作用域
- 自由变量
- 作用域链,即自由变量的查找
5 实际开发中闭包的应用