用JavaScript进行手工分配
var var1 = 1,
var2 = 1,
var3 = 1;
这相当于这样的:
var var1 = var2 = var3 = 1;
我相当肯定,这是变量定义的顺序:var3,var2,var1,它等同于:
var var3 = 1, var2 = var3, var1 = var2;
有什么方法可以在JavaScript中确认这一点吗? 可能使用一些分析器?
其实,
var var1 = 1, var2 = 1, var3 = 1;
不等同于:
var var1 = var2 = var3 = 1;
区别在于范围:
function good() {
var var1 = 1, var2 = 1, var3 = 1;
}
function bad() {
var var1 = var2 = var3 = 1;
}
good();
console.log(window.var2); // undefined
bad();
console.log(window.var2); // 1. Aggh!
JavaScript中的作业从右到左起作用。 var var1 = var2 = var3 = 1;
。
如果在这个语句之后这些变量中的任何一个的值是1
,那么逻辑上它必须从右边开始,否则值或var1
和var2
将是未定义的。
你可以认为它等价于var var1 = (var2 = (var3 = 1));
最先评估最内侧的一组括号。
a = (b = 'string is truthy'); // b gets string; a gets b, which is a primitive (copy)
a = (b = { c: 'yes' }); // they point to the same object; a === b (not a copy)
(a && b)
是(a ? b : a)
简称
(a || b)
是(a ? a : b)
简称,
(a = 0, b)
是不在乎a
是否真的,隐含地返回b
a = (b = 0) && "nope, but a is 0 and b is 0"; // b is falsey + order of operations
a = (b = "b is this string") && "a gets this string"; // b is truthy + order of ops
JavaScript运算符优先级(操作顺序)
请注意,逗号运算符实际上是最小权限的运算符,但括号是最有特权的,并且在构建单行表达式时它们并行不悖。
最终,你可能需要“thunk”而不是硬编码的原始值,而且我意外地传递了多个params而不是通过两个表达式来绊倒。
对我来说,thunk既是函数又是结果值(同样的东西)。
const windowInnerHeight = () => 0.8 * window.innerHeight; // a thunk
windowInnerHeight(); // a thunk
链接地址: http://www.djcxy.com/p/1879.html