context 是js 的作用域和this上下文对象的合集,对于它的理解是前端开发的重中之重
知识点
1 对象的作用域,什么时候是User对象,是时候是window全局对象?
变量的有效范围就是作用域,分为全局作用域和局部作用域,局部作用域只有在函数内部可以访问,全局作用域在任何位置都可以访问
直接调用的方法 作用域指向该对象
通过定义变量创建的方法 作用域会指向window全局对象上
2 apply 和 call 方法的区别是什么?该怎么用?
用来改变函数this作用域的指向的方法
call 传入多个参数
self.call(1,2,3,4,5);
apply 传入数组
self.apply(context,arguments);
3 如何把作用域是 window 的方法 绑定到 User对象上?
内置方法 Function.bind(User) ; 原理无外乎 self.apply(context,arguments);
面试题:
var User = { count: 1, getCount: function() { return this.count; } }; console.log(User.getCount()); // 1 => User var func = User.getCount; console.log(func()); // undefined => Window // 修改指向User var func1 = User.getCount.bind(User); console.log(func1()); // 兼容 Function.prototype.bind = Function.prototype.bind || function(context){ var self = this; console.log(context); // User 作用域 console.log(arguments); // getCount 作用域 return function(){ return self.apply(context,arguments); } }