js高级进阶
js高级——执行上下文
// 全局执行上下文
console.log(a1, window.a1);
window.a2();
console.log(this);
var a1 = 3
function a2() {
console.log('a2()');
}
console.log(a1);
// undefined undefined
// a2()
// 25 Window {window: Window, self: Window, document: document, name: '', location: Location, …}
// 30 3改变函数内this指向
call()
// 1. call()
var o = {
name: 'hlc'
}
function fn(a, b) {
console.log(this, a + b);
}
fn.call(o, 1, 3)
function Father(uname, age, sex) {
this.uname = uname
this.age = age
this.sex = sex
}
function Son (uname,age,sex){
Father.call(this,uname,age,sex)
}
var son =new Son('1','2','3')
console.log(son);apply
var o = {
name: "andy"
};
function fn(arr) {
console.log(this);
console.log(arr);
}
fn.apply(o, ['pink'])
// 1.也是调用函数,第二个可以改变函数内部的this指向
// 2.但是他的参数必须是数组(伪数组)
// 3. apply 的主要应用是可以利用apply借助于数学 内置对象求最大值 Math.max()
var arr = [1, 88, 22, 43]
// var max = Math.max.apply(null, arr);
var max = Math.max.apply(Math, arr);
var min = Math.min.apply(Math, arr);
console.log(max,min);bind
// 3.bind() 不会的调用函数,但是能改变函数内部的this指向
// 不会调用原来的函数 可以改变原来函数内部的this,指向
// 返回的是原函数改变this之后产生的新函数
var o = {
name: "andys"
};
function fn() {
console.log(this);
}
var f = fn.bind(o);
f()