JS:分配 document.getElement... 不适用于 var/let(没有)

JS: assigning document.getElement... doesn't work with var/let (works without)

如果我这样做

x = document.getElementsByClassName("something")[0]

我得到了预期的结果。

但如果我这样做

var x = document.getElementsByClassName("something")[0]

let x = document.getElementsByClassName("something")[0]

我不确定。

这是为什么?

document.getElementsByClassName 将 return 数组命名为 HTMLCollection

请看这段代码,

var testElements = document.getElementsByClassName('test');
var testDivs = Array.prototype.filter.call(testElements, function(testElement){
  return testElement.nodeName === 'DIV';
});

也可以查看详情here

声明一个变量不会return任何东西(即undefined),但是分配一个变量return值。例如:

let x, y
x = y = 7  // this sets both x & y to seven

上面的行之所以有效,是因为 y = 7 return 是 y 的值,然后将其分配给 x。但是你不能用变量声明做任何事情:

let x = 7
x = let y = 3  // syntax error

关键是声明一个变量不会 return 一个值,这就是为什么你在控制台(也在节点 REPL 中)看到它后面的 undefined,但是赋值或其他值return 一个值将显示该值。

请注意,您可以这样做:

var x = document.getElementsByClassName("something")[0]
x   // this line will return the value of x