nor*_*can 11 javascript jquery coding-style
这似乎有效,但有任何理由我不应该这样做吗?它为我节省了一行代码,让我设置一个变量和一个文本区域的值.
$('#price').val(default_price = 2.9);
Run Code Online (Sandbox Code Playgroud)
它相当于:
default_price = 2.9;
$('#price').val(default_price);
Run Code Online (Sandbox Code Playgroud)
Dav*_*ton 18
它嵌入代码在代码中做一件事做一些完全不同的事情.
特别是如果你在谈论默认值,"常量"等,将初始化与UI交互混淆会导致混淆.将它们分开 - 更容易找到和维护.
从技术上讲,这是一回事.在认知上它不是.
ov引发了全球命名空间污染的幽灵.通过在任意位置声明变量,可以增加覆盖值的几率,指责标识符,重复工作等等.
除了创建难以隔离的错误之外,这还是一个额外的认知负载,因为您必须了解声明的变量的范围,找到它可能使用的位置等.
我会接受这样的想法,这种构造在某些情况下是可以接受的,但不是这个,特别是因为在给定的例子中还有其他风格问题(最大的一个是"魔法数字来自哪里")
主要关注IMO是否已声明变量 - 您不能简单地说
$('#price').val(var default_price = 2.9); //nope
Run Code Online (Sandbox Code Playgroud)
如果原始代码与尚未声明的变量一起使用,则最终会污染全局范围.但是,如果变量已经被宣布,它带来了一个后续问题"为什么它没有被声明为正确的默认值".或者,根据(未知)条件,幻数可能会有所不同:
if (/*whatever*/) {
$('#price').val(default_price = 2.9);
} else {
$('#price').val(default_price = 9522); //over 9000
}
Run Code Online (Sandbox Code Playgroud)
同样,这在风格上很差,因为设置#price应该在条件(或switch法定)之外执行的值:
if (/*whatever*/) {
default_price = 2.9;
} else {
default_price = 9522;
}
$('#price').val(default_price);
Run Code Online (Sandbox Code Playgroud)
可能存在一个复杂的情况,其中变量setter被覆盖以返回除分配值之外的其他东西,这在IMO首先是一个有问题的实践.