this是一个指针型变量,通常在函数中使用 this指向的永远只可能是对象;
定义函数时并不能确定this的指向,函数调用时才能确定this指向
- 在全局作用域下,this始终指向全局对象window,无论是否是严格模式!
- 对象中的this: 谁调用就指向谁 多层嵌套的对象,内部方法的this指向离被调用函数最近的对象。
- 在事件处理函数中 this指向添加事件的dom对象
- 构造函数中,this指向创建函数的实例对象
- 找不到函数调用对象时,this指向window (计时器)
- 函数作为数组的一个元素,通过数组下标 调用,this指向这个数组
function example() { console.log(this); } var arr = [example, 1, 2, 3, 4]; arr[0](); // this ==> arr
7. call、apply、bind可以改变函数的this指向
面试题
var length = 3;
var obj = {
length: 4,
fn: function (){
return this.length;
}
}
console.log( obj.fn() );// 4 obj.fn() this -> obj
(function (fn1){
var length = 5;
console.log( fn1() );// 3 this -> window
console.log( arguments[0]());// 1
// this -> arguments arguments指实参,[0]指第一个实参也就是fn 加括号就是调用fn 返回的是实参的长度
// 等价于 console.log( arguments.0() );// 1
})(obj.fn);
打印结果: 4 3 1