在Javascript 闭包的秘密 中,Stuart Langridge 提供了一段代码来演示 .onclick 回调中闭包的常见用法,并解释:
link.onclick = function (e) {
var newa = document.createElement("a");
var that = this;
document.body.appendChild(newa);
newa.onclick = function (e) {
that.firstChild.nodeValue = "reset";
this.parentNode.removeChild(this);
}
}
我最近偶然发现了 Kyle Simpsons 的 Speaker Deck New Rules For Javascript并且他提到this
为类似var self = this
or的闭包保存范围var that = this
是“被误导的”并且是Object.prototype.bind()
. < 除了 ES5 兼容性之外,我更愿意依靠语言结构来解决问题,而不是使用 hack 或快速修复,但在这段代码片段中,使用bind
, apply
or的问题call
是对封闭值this
的引用和闭包的引用的值this
是需要的。
这是实用性胜过哲学的案例吗?可以做什么?