更好地在事件处理程序或函数中获取变量值?

时间:2013-09-26 03:27:34

标签: javascript function event-handling

一种随机问题但可能对最佳实践有用 - 在事件处理程序阶段获取输入值并将它们传递给函数而不是将它们放入函数中是否有任何优点或缺点?如:

$('.ep').on('click',function(event) {
   get value1
   get value2
   doSomething(value1,value2)
});

而不是

function doSomething()
    get value1
    get value2
    ...rest of function
}

1 个答案:

答案 0 :(得分:0)

假设您的第二个完整示例是:

function doSomething()
    get value1
    get value2
    ...rest of function
}

$('.ep').on('click', doSomething);

然后这两个在功能上是相同的,所以性能是相同的。首先,您要定义一个匿名函数并将其作为参数传递。在第二步中,您将定义一个命名函数并将命名函数作为参数传递。在这两种情况下,都执行相同的函数体。

但是,此示例的性能可能更好:

var doSomething = (function(){
    get value1
    get value2
    return function(){
        ...rest of function
    }
})();

$('.ep').on('click', doSomething);

那是因为在这个例子中我们使用立即函数并在立即函数内部定义value1value2并返回一个函数以分配给doSomething。这意味着当执行立即函数时,value1value2被分配一次,但由于Javascript闭包,它们都可以在返回的函数内部访问。

这与前两个示例形成对比,前两个示例在每次事件触发并运行函数时都会声明value1value2