先来个小栗子
<script>
var name = "全局的name";
var a = {
name : "a函数中的name",
say: function () {
console.log(this.name);
}
}
var fun = a.say;
fun(); //全局的name
a.say(); //a函数中的name
var b = {
name : "b函数中的name",
say: function (fun) {
fun();
}
}
b.say(a.say); //全局的name
b.say = a.say;
b.say(); //b函数中的name
</script>
再来个小栗子(使用箭头函数)
<script>
/* 箭头函数 */
var age = 18;
var obj1 = {
age: 28,
say: () => {
console.log(this.age);
}
}
obj1.say(); //18 (全局的)
/* 普通函数 */
var obj2 = {
age: 38,
say: function () {
console.log(this.age);
}
}
obj2.say(); //38 (函数里的)
</script>
this到底是什么
- 所有函数内部都有一个变量this
- 任何函数本质上都是通过某个对象来调用的, 若没有指定即为window
- 是调用函数的当前对象
如何确定this
- test() —> window 以函数形式调用
- p.test() —> p 以方法的形式调用
- new test() —> 新的创建的对象 以构造函数形式调用
- p.call(obj) —> obj 使用call和apply方法调用
关于函数作用域: 函数的作用域就是其声明时所在的作用域