gpt4 book ai didi

javascript - 每次函数运行时进行检查的更好编码

转载 作者:行者123 更新时间:2023-11-29 19:26:01 25 4
gpt4 key购买 nike

我试图消除函数中无用的检查,需要的检查变量是在应用程序启动时分配的,所以我不想每次都检查它。

我有这样的代码:

btnClose.addEventListener('click', function(e) {
window.close()
if (appSettings.sendAnonymousStats) {
visitor.event("Application", "App has been closed.").send()
}
})

这是我第一次尝试优化它,所以现在它不需要在每次调用时都进行“if”检查;

let btnCloseEv = appSettings.sendAnonymousStats ? btnClose.addEventListener('click', function(e) {
window.close()
visitor.event("Application", "App has been closed.").send()
}) : btnClose.addEventListener('click', function(e) {
window.close()
})

我想知道理论上是否有更好的方法来实现我想要实现的目标?

最佳答案

删除单个 if 语句,尤其是考虑到每次点击只发生一次,根本不会影响运行时间。

但是为了讨论的目的,说它对性能至关重要,比如如果它附加到 onmousemove,那么您可以通过一个小的更改来调整您的第二种方法以减少代码冗余。

let btnCloseEv = btnClose.addEventListener('click',
appSettings.sendAnonymousStats ?
function(e) {
window.close();
visitor.event("Application", "App has been closed.").send();
} : function(e) {
window.close();
}
)

这是可行的,因为 JS 中的函数是高阶函数,这意味着它们被视为变量并且可以像变量一样传递。例如,如果 a 和 b 是数字、函数或任何其他类型的变量,这将起作用。

var c = someBoolean ? a : b;


假设每个函数都大很多并且您想使用这种方法但事情变得不可读,最好给每个函数命名并像这样附加它们:

function moreComplexFunc(e) {
window.close();
visitor.event("Application", "App has been closed.").send();
// More complex code
}

function simpleFunc(e) {
window.close();
}

let btnCloseEv = btnClose.addEventListener(
'click',
appSettings.sendAnonymousStats ? moreComplexFunc : simpleFunc
)


现在假设您注意到 moreComplexFuncsimpleFunc 中有很多代码重复,您可以更进一步,将类似的代码分成第三个函数,如下所示:

function commonFunc(e) {

window.close();
}

function func1(e) {
commonFunc(e);

visitor.event("Application", "App has been closed.").send();

// other code
}

function func2(e) {
commonFunc(e);

// other code
}

let btnCloseEv = btnClose.addEventListener(
'click',
appSettings.sendAnonymousStats ? func1 : func2
)

支持高阶函数的语言的机会真的是无穷无尽的。

关于javascript - 每次函数运行时进行检查的更好编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30779234/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com