1. 所有在全局作用域里面定义的函数 都是window函数
所有在全局作用域里面定义的变量 都是window的变量
window只有一个 所以一般省略不写
全局环境作用域: this在全局环境始终指向window
2.作用域(链)形成在函数声明或者定义的时候 和函数的执行无关
3.this[只存在函数中] 指向形成在函数的执行时期 和函数的定义没有任何关系
4.this 指向【普通情况】 直接执行当前函数的对象/指向 执行当前函数最近的对象
5.this 指向【特殊情况】 this的指向就是返回值
* new 关键字 作用于函数的执行 仅仅改变返回值 和 this指向 对其他逻辑没有任何影响
*
* 【补充】: new 关键字作用于函数 函数的默认返回值空对象
/*var o = {
f: '123',
foo: function () {
console.log(this);
}
};
var o1 = {
msg: '我是o1',
foo: undefined
};
o.foo(); // o
o1.foo = o.foo;
o1.foo(); // o1
var o2 = {
msg: '我是o2',
o3: {
msg: '我是o3',
foo: function () {
console.log(this);
}
}
};
o2.o3.foo();
function abc() {
console.log(this);
console.log('隐藏大boss window')
}*/
call/apply 改变this的指向
每个Function构造函数的原型prototype, 都有方法
call(), apply(), bind()
1.call apply 都是执行函数 在特定作用域调用函数
【相同点】
* call apply 随意地更改this指向
* this的指向为call和apply第一个参数 如果第一个参数为null 或者 undefined 的时候 没有作用
* 【不同点】
* 传参方式不一样
1. call() 方法 apply() 方法
apply() 与call() 非常相似, 不同之处在于提供参数的方式, apply() 使用参数数组, 而不是参数列表
2. bind() 方法 bind() 创建的是一个新的函数( 称为绑定函数), 与被调用函数有相同的函数体,
当目标函数被调用时this的值绑定到 bind() 的第一个参数上