例如,我需要注册一个onclick事件,该事件调用另一个函数sayHello()来打招呼,其参数作为当前作用域中可用的变量。
我可以使用IIFE将变量注入匿名函数的范围,如下所示:
var currentName = "James";
something.onclick = (function(name) {
return function() {
sayHello(name);
};
})(currentName);但是,我也可以使用通过bind()方法进行函数运行的版本,如下所示:
var currentName = "James";
something.onclick = sayHello.bind(null, currentName);尽管使用IIFE方法将允许您在匿名方法中执行不止一个函数调用,但是将其替换为运行方法有什么缺点吗?
发布于 2016-05-10 17:01:02
通过
bind()方法运行函数
我是部分适用。
把生活换成
bind有什么坏处吗?
两种方法的不同之处在于,bind传递进一步的参数,而不仅仅是使用name调用sayHello。在这种情况下,事件参数将传递给处理程序,而不是被忽略。当然,这是可以修复的(使用arguments对象或ES6 rest+spread),但是它只会使它变得更加复杂和容易出错。
这是主要的缺点,海事组织:它是相当长,但不必要的长。我更喜欢简约。
https://stackoverflow.com/questions/36747209
复制相似问题