gpt4 book ai didi

JavaScript 范围澄清

转载 作者:行者123 更新时间:2023-12-02 18:04:36 25 4
gpt4 key购买 nike

我已经阅读了几乎所有我能接触到的关于 JavaScript 作用域的文章,以便更好地理解它。我想到最后完全理解它。我目前正在阅读这篇文章:http://www.digital-web.com/articles/scope_in_javascript/我刚刚读完“并发症”部分(读了一半多一点),认为它非常有帮助,但不够清晰。

它使用以下代码并考虑 the_buttononclick 行为:

function BigComputer(answer) { 
this.the_answer = answer;
this.ask_question = function () {
alert(this.the_answer);
}
}

function addhandler() {
var deep_thought = new BigComputer(42),
the_button = document.getElementById('thebutton');

the_button.onclick = deep_thought.ask_question;
}

window.onload = addhandler;

文章指出...事件处理程序[,]在与作为对象方法执行时不同的上下文中运行。因此,如果我理解正确的话,那么调用脚本对象方法上下文中的 ask_question 方法是 deep_thought.ask_question,使得 this deep_thought。但是,当触发 DOM 中的事件时,调用链将更改为 DOMelement.eventHandler.deep_thought.ask_question 使得 this DOMelement?

最佳答案

这是正确的!事件处理程序中的“this”是您绑定(bind)到的元素。在本例中,它将是 the_button。由于 the_button 没有 the_answer 属性,该警报将处于“未定义”状态。

您可以在以下位置查看示例:http://jsfiddle.net/zG7KR/

看看它输出什么:

this.ask_question = function () { 
alert(this.the_answer);
};

关于JavaScript 范围澄清,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20201844/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com