安全渗透重点内容
this是js中的一个关键字,在不同的场合使用,this的值会发生变化,下面我将详细的介绍this在函数中的各种指向。
在方法中,this表示该方法所属的对象。
如果单独使用,this表示全局对象。
在函数中,this表示全局对象。
在函数的严格模式下,this是未定义的(undefined)。
在事件中,this表示绑定事件的元素对象。
使用new 构造函数创建对象,this就是实例对象
1.作为函数,它的this指向是全局变量。作为方法,它是window对象的方法
function fn(){
var a=123
console.log(this.a)
console.log(this)
}
fn()
2.作为对象内部this当然就是指向对象obj
var obj={
var a='123'
fn:function(){
console.log(this.a)
console.log(this)
}
}
obj.fn()
3.new一个实例对象b,等于把函数Fn复制了一份放在对象b对象里面,this的指向的就是b对象。
function Fn(){
this.a='123'
}
var b=new Fn()
console.log(b.a)
4.返回值是一个对象时,this指向的就是返回的对象,如果返回值不是一个对象,那么this指向函数的实例
//构造函数中有返回值的情况。
function fn(){
this.a=123
return {}
}
var b=new fn()
console.log(b.a)
function fn(){
this.a=123
return 1
}
var b=new fn()
console.log(b.a)
5.返回值是null的特殊情况
function fn(){
this.a=123
return null
}
var b=new fn()
console.log(b.a)
JavaScript异步任务的微任务和宏任务
宏任务通常指与浏览器渲染相关的任务
常用的宏任务有:SetTimeout、SetInterval等等
SetTimeout:延时器用法
let blue = '我是什么颜色'
let outTimer = setTimeout(function() {
console.log(blue) // 两秒种后控制台打印
clearTimeout(outTimer) // 关闭延时器
}, 2000)
SetInterval:定时器用法
let money = 1
let interTimer = setInterval(function() {
console.log(k++) // 若不关闭,指定时间无限循环执行
if (k >= 5) clearInterval(interTimer)
}, 2000)
微任务一般是指不与主线程任务同步执行的任务,常用微任务:Promise.then(经常用到的典型例子)、Object.observe、MutationObserver等
Promise 的创建
let PUA = function(val) {
return new Promise((resolve, reject) => {
if (val === 1) resolve('成功')
else reject('失败')
})
}
console.log(PUA(1)) // 值与 if 匹配,会返回成功
Promise 的 .then() 方法
let PUA = function(val) {
return new Promise((resolve, reject) => {
if (val === 1) resolve('成功')
else reject('失败')
})
}
PUA(1).then((val) => {
console.log(val)
console.log('成功后打印')
})
执行顺序是:同步任务 ===> 微任务 ===> 宏任务