用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 ,那么逻辑上它必须从右边开始,否则值或var1var2将是未定义的。

你可以认为它等价于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

上一篇: hand assignment with JavaScript

下一篇: Javascript splice changing earlier values in an array