我知道这可能是
JavaScript中第二个最关心的事情,就在浮点算术之后.
我通常知道这是如何工作的,以及它如何受到箭头函数.call(),.apply()和.bind()的影响.我以为我理解了一切.但我不.
在web浏览器中,document.createElement(“div”).classList.add(“c”)按预期的方式生成undefined.然而,这个表达令人惊讶地是一个错误.
(true && document.createElement("div").classList.add)("c")
我预计它是一样的,但它是
Uncaught TypeError: Illegal invocation at <anonymous>:1:54
解决方法
你的声明
(true&& document.createElement(“div”).classList.add)(“c”)也可以重写如下:
var add = (true && document.createElement("div").classList.add) add("c")
[逻辑与(&)expr1& expr2:如果可以将其转换为false,则返回expr1;否则返回expr2.]
你看到这个函数add现在是窗口的一部分,失去了实际的classList对象的引用,因此不能被正确的调用.
现在这个add这个指向全局对象.
如果您执行以下操作(如果新的div是您页面上唯一的div),它再次引用了原始对象:
(true && document.createElement("div").classList.add).bind(document.getElementsByTagName("div")[0].classList)("c")