Javascript:在条件结果之前声明变量?
我的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
的执行,那么可以,最好不要拨打该电话。