javascript-高级程序设计 - 关于JavaScript高级程序设计函数绑定的疑问

查看:70
本文介绍了javascript-高级程序设计 - 关于JavaScript高级程序设计函数绑定的疑问的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

function bind(fn, context) { 
  return function() { 
    return fn.apply(context, arguments); 
  } 
}

不明白为什么能获得event对象?为什么所有的参数(这里指的function的参数吧?那function的参数是什么?是event对象的吗?)都通过被绑定的函数直接传给它?

解决方案

arguments 是内部的……这个翻译有点歧义,它的意思是语言内部定义的,或者说是预定义的,代表函数获得的所有参数,以一个类似数组的对象表示。

原话

注意这里使用的 arguments 对象是内部函数的

这里的内部是修饰函数而不是 arguments,

function bind(fn, context) {  // <-- 这个 function 是(相对)外部函数
  return function() { // <-- 这个 function 是(相对)内部函数
    return fn.apply(context, arguments); 
  } 
}

另外,你需要了解 apply

综上及示例,bind 函数把 handler.handleClickhandler 绑定起来了,也就是说,上面 bind 的定义中,fn 对应的是 handler.handleClick,而 context 对应的是 handler`。

定义返回的匿名函数假定为 fx,那么在事件触发时,会调用 fx(event),由于内部有 fn.apply(context, arguments) 调用,这里的 arguments 实际是一个类数组 [event],相当于通过 applyevent 传递给了 fn,即 handler.handleclick

这篇关于javascript-高级程序设计 - 关于JavaScript高级程序设计函数绑定的疑问的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆