function fn(a, b) {
  console.log(a, b, this);
}
var magicFn = bind(fn, {});
magicFn(2, 3);
function bind(cb, context) {
  console.log(arguments); // arguments[fn(a, b), {}]
  return function() {
    console.log(arguments); // arguments[2, 3]
    cb.apply(context, arguments);
  }
}