题目
- this的不同应用场景,如何取值?
知识点this
- 手写bind函数
- 实际开发中闭包的应用场景,举例说明
- 隐藏数据
- 如:做一个简单的cache工具
function createCache(){
const data= {} //闭包中的数据,被隐藏,不被外界访问
return {
set:function (key,val) {
data[key] = val
},
get:function (key){
return data[key]
}
}
}
const c = createCache()
c.set('a',100)
c.get('a')
- 创建10个a标签,点击的时候弹出来对应的序号?
代码
let a
for(let i=0;i <10;i++){
a = document.createElement('a')
a.innerHTML = i +'<br/>'
a.addEventListener('click',function(e){
e.preventDefault()
alert(i)
})
document.body.appendChild(a)
}
知识点
- 作用域和自由变量
- 闭包
自由变量的查找,是在函数定义的地方,想上一级作用域查找,不是在执行的地方
- 函数作为返回值
function create() {
let a = 100
return function () {
console.log(a)
}
}
let fn = create()
let a = 200
fn() // 100
- 函数作为参数
function print(fn){
let a = 200
fn()
}
let a = 100
function fn() {
console.log(a)
}
print(fn) //100
- this
this要在执行时才能确认值,定义时无法确认
- 作为普通函数执行
- 使用call apply bind
- 作为对象方法被调用
注意!!!wait方法中的this是setTimeout自动执行的所以看做普通函数的执行,不是wait执行的,所以this是window
- 在class方法中调用
this.name this指正在创建的实例,console.log中的this指zhangsan这个对象
- 箭头函数
箭头函数指向上级作用域 所以this指向当前对象