javascript-高级程序设计 - 关于JavaScript高级程序设计函数绑定的疑问
ringa_lee
ringa_lee 2017-04-11 10:30:50
[JavaScript讨论组]
function bind(fn, context) { 
  return function() { 
    return fn.apply(context, arguments); 
  } 
}

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

ringa_lee
ringa_lee

ringa_lee

全部回复(4)
巴扎黑

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

PHP中文网

分开来看可能要好理解一点。

var fixedHandler = bind( handler.handleClick, handler );

EventUtil.addHandler( btn, "click", fixedHandler );

以上代码,fixedHandler 是 bind 返回的一个函数,把 fixedHandler 作为事件处理程序添加后,当事件发生时,浏览器会把 event 传递给 fixedHandler。fixedHandler 又在内部通过 apply 把自己的所有参数(arguments) 传递给 handler.handleClick 。

题主要理解好 arguments 和 apply。

迷茫

arguments返回的是当前函数的参数

怪我咯

看书不认真:

注意这里使用的 arguments 是内部函数的,而非 bind() 的。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号