在每个函数中处理“that”时奇怪的JS行为
Strange JS behavior when handling "that" inside an each function
我注意到使用 javascript 进行开发时有一种不寻常的行为,有人可以向我解释一下吗?
我有一个javascript代码:
function MyFunction(){
var categoryId = 'abc';
var that = this;
$(_elem).parent().find('[data-id]').each(function(){
that.categoryId += $(this).data('id') + ',';
});
setEventsCategoryEx(categoryId, url, parentUrl);
}
这应该是错误的,因为 categoryId 不是全局的,所以不应该使用 "that.categoryId" 访问它。
问题是:当执行首次进入 each 方法时,输出that.categoryId 将生成 "abc"(我分配给本地 categoryId 变量的值)。
当鼠标离开每个函数时,那个.categoryId和categoryId有不同的值:类别 ID = "abc"that.categoryId = "abc+"
我不明白以下内容:它们应该是分离的变量,为什么它们以相同的值开头?
谢谢奥斯卡
编辑:抱歉,在复制和粘贴时,我忘记添加函数声明。它位于由"onclick"事件调用的函数内。
如果您不在函数内,则var categoryId = 'abc'
具有与window.categoryId = 'abc'
相同的效果。
如果您不在函数内,则this
window
所以你看到的是预期的行为。
有关此实时示例,请参阅您的 js 控制台
编辑:抱歉,在复制和粘贴时,我忘记添加函数声明。它位于由"onclick"事件调用的函数内。
编辑后,我无法重现该问题。
在非严格模式下调用未用作方法的函数时,this
是全局对象。
语言规范的第 11.2.3 节说:
生产 CallExpression
:
MemberExpression *Arguments* 的计算方法如下:6. If Type(ref) is Reference, then If IsPropertyReference(ref) is true, then Let thisValue be GetBase(ref). Else, the base of ref is an Environment Record Let thisValue be the result of calling the ImplicitThisValue concrete method of GetBase(ref).
相关文章:
- JS数组称为“;name”;行为怪异
- Angular js$Interval怪异行为-Firefox Chrome
- MaterialDesign,JS行为在通过ajax加载时丢失
- tween.js动画的奇怪行为
- 如果缩放为最大/最小,如何忽略d3.js缩放行为
- Passport.js`isAuthenticated()`不一致的行为;当它应该是真的时候是假的
- 无法理解Angular JS的ui路由器行为
- 非常奇怪的JS/jQuery行为-alert()包含/排除
- Marionette.js-从itemView访问行为函数
- 在每个函数中处理“that”时奇怪的JS行为
- D3.js在画布和svg中映射缩放行为
- 是什么导致JS中出现这种带有.length的奇怪行为
- Underscore.js:具有_.object函数的意外行为
- 清除输入字段值-STCombobox时出现意外的JS行为
- 如何使用d3.js缩放折线图中的行为
- D3.JS树映射不一致的缩放行为
- 怪异节点.js'需要行为
- 提高网络速度并连接到node.js服务器时出现意外行为
- 怪异的JS行为:执行函数需要额外的一行
- 如何禁用整页的自动重新对齐行为.js当滚动在两个部分的中间之间结束时