JavaScript范围说明
JavaScript Scope Clarification
我已经阅读了几乎每一篇关于JavaScript作用域的文章,以更好地理解它。我希望在最后完全理解它。我目前正在阅读这篇文章:http://www.digital-web.com/articles/scope_in_javascript/我刚读完"并发症"一节(读到一半多一点),觉得它很有帮助,但还不够清楚。
它使用以下代码并考虑the_button
:的onclick
行为
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;
这篇文章陈述了... an event handler[,] runs in a different context than when it’s executed as an object method.
,所以,如果我要正确理解,那么在脚本的对象方法的上下文中对ask_question
方法的调用是deep_thought.ask_question
,使this
成为deep_thought
。但是,当DOM中的事件被触发时,调用链会变为DOMelement.eventHandler.deep_thought.ask_question
,使this
成为DOMelement
?
这是正确的!'事件处理程序中的this是您绑定到的元素。在这种情况下,它将是the_button
。由于the_button
没有the_answer
属性,因此警报将为"未定义"。
您可以在以下位置看到示例:http://jsfiddle.net/zG7KR/
查看此输出:
this.ask_question = function () {
alert(this.the_answer);
};
相关文章:
- 正在全局范围中查找JavaScript函数
- 如何通过数组更新角度子范围
- 如何使用ngrepeat和双向绑定获得指令的隔离范围
- HTML范围:动态设置值属性
- "实例范围”;TypeScript类的getter/setter
- jquery日期选择器年份范围默认值
- Jpgraph:如何手动设置X轴和Y轴的范围
- 在对象数组中查找多个值的d3范围
- 动态加载angularjs并生成控制器和范围
- 关于 Javascript 中 parseInt() 的说明
- 如何通过谷歌应用程序脚本从谷歌文档中的位置确定命名范围
- 在Materialize Calendar中设置年份范围
- 在MVVM视图模型中处理应用程序范围的元素
- setInterval游戏循环的范围问题
- AngularJS获取范围中的选定项目
- 从指定范围创建字符数组
- ES6是否引入了一种机制来生成块范围的函数语句(而不是表达式)
- JavaScript范围说明
- 十分钟内的 Javascript:此示例代码中发生了什么说明惰性范围
- JavaScript递归和范围说明