我以这种方式构建了一个JavaScript调用:
if (($(this).scrollTop() == 0) && !controlsVisibility) {
triggerControls();
}
else if (currentScroll > (previousScroll + 100) && controlsVisibility) {
triggerControls();
};
虽然triggerControls()
执行undefined
的只是案例检查,并且使用controlsVisibility
作为默认arg确定它应该做什么。我想:
我是否错误地将controlsVisibility
作为函数arg传递到if
子句中。如果该变量的值在我调用triggerControls()
和函数执行(微秒?)之间变化 - 我应该:
通过使用全局状态来解释可能的更改(,因为它现在是)
或
通过提前传递稳定的args来干扰更改?
我知道这可以根据具体情况确定,但我真的很感激一些提示。
如果当前的实施(1)是正确的
我只能使用
if
在一个||
中编写两个方案检查,因为我正在执行相同的功能。除了凌乱并使代码难以理解为什么不应该这样做呢?
答案 0 :(得分:2)
如果该变量的值在我调用triggerControls()和函数执行(微秒?)之间发生变化
没有。当您的脚本正在执行时,没有其他任何内容会改变该变量--JavaScript是单线程的。除非triggerControls
执行某些异步操作并且期望在将来的事件循环中使用相同的值,否则一切都很好。
如果仅使用||,我可以在两个方案中编写两个方案检查因为我正在执行相同的功能。除了凌乱并使代码基本上不可读之外我为什么不应该这样做呢?
我没有理由不这样做。避免重复并不是很混乱(但dry),我不认为它不可读。您甚至可以使用ternary operator缩短(并优化)它:
if (controlsVisibility
? currentScroll > (previousScroll + 100)
: $(this).scrollTop() == 0
) {
triggerControls();
}
答案 1 :(得分:2)
我不同意使用||
运算符滚动这两个条件的说法是不可读的。使用正确的格式,它非常易读:
if (
(($(this).scrollTop() == 0) && !controlsVisibility) ||
(currentScroll > (previousScroll + 100) && controlsVisibility)
) {
triggerControls();
};
这显然是由controlsVisibility
切换的两个条件。我个人更希望首先检查controlsVisibility
,以确保它更清晰:
if (
(controlsVisibility && currentScroll > (previousScroll + 100)) ||
(!controlsVisibility && ($(this).scrollTop() == 0))
) {
triggerControls();
};
但是,您还询问是否有更紧凑的方式来编写此文件,并且:
if (controlsVisibility ?
currentScroll > (previousScroll + 100) :
$(this).scrollTop() == 0
) {
triggerControls();
};
我认为上面的代码很明显且可读,但不是每个人都喜欢三元运算符。