context 作用域小解

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);
    }
}
每天一点点积累
原文地址:https://www.cnblogs.com/dreamone/p/7449019.html