Javascript:在条件结果之前声明变量?

时间:2020-03-05 18:43:04  来源:igfitidea点击:

我的JavaScript非常正式,所以当我看到这种构造时,我有点困惑:

var shareProxiesPref = document.getElementById("network.proxy.share_proxy_settings");
shareProxiesPref.disabled = proxyTypePref.value != 1;

proxyTypePref.value上执行if,然后仅在需要时才在结果内声明var,这不是更好吗?

(顺便说一句,与正常用法相比,我也发现很难读懂这种形式。其中有两个或者三个这些条件集,而不是如果结果中有语句块,则不做一个。)

更新:

回答非常有帮助,并要求提供更多背景信息。该代码段来自Firefox 3,因此我们可以在此处查看代码:

http://mxr.mozilla.org/firefox/source/browser/components/preferences/connection.js

基本上,当我们在Firefox中查看"连接首选项"窗口时,单击代理模式(单选按钮)会导致启用各种表单元素。

解决方案

回答

(Incidentally, I also found this form very hard to read in comparison to the normal usage.

不一定,尽管那也是我的第一个想法。代码应始终强调其功能,尤其是在有副作用的情况下。如果作者的意图是强调对sharedProxiesPref.disabled的赋值,那么,请顺其自然。另一方面,可能更清楚的是,此处执行的操作是禁用对象,在这种情况下,条件块会更好。

回答

这取决于此代码的上下文。如果它在页面加载时运行,那么最好将此代码放在if块中。

但是,如果这是验证功能的一部分,并且该字段在页面的整个生命周期内在启用和禁用之间切换,则这种代码是有意义的。

重要的是要记住,将禁用设置为false也会更改页面状态。

回答

很难说在没有更多上下文的情况下做什么更好。

如果每次proxyTypePref更改时都执行此代码,那么我们将始终需要设置shareProxiesPref.disabled

我会同意,如果if语句比当前代码更具可读性。

Isn't it better to do an if on proxyTypePref.value, and then declare the var inside the result, only if you need it?

如果严格讲变量声明,那么是否将其放在if语句中都没关系。在函数内部声明的任何Javascript变量都在整个函数的范围之内,而不管它在何处声明。

如果我们正在谈论document.getElementById的执行,那么可以,最好不要拨打该电话。