我无法弄清楚为什么$ elm的范围在jQuery的每个循环中丢失了。 $ elm的范围是稳固的:76,77然后在78的循环内丢失。我做错了什么?
这是显示代码的图片。
我添加了这张图片(参考我的评论)作为证据,只是通过引用$ elm,然后我可以在控制台上使用它。
答案 0 :(得分:2)
修改强>
事实证明,在$elm
循环内的断点处,OP没有看到Chrome调试器中自动列出的.each()
值的真正问题。这是因为实际本地范围中使用的变量仅在调试器的scope variables
部分中由Chrome显示,此时$elm
位于父作用域中,而不是在本地作用域中。
通过将变量的名称放入监视表达式,可以看到范围内的任何变量,包括父作用域中的变量。
jQuery.each()
将this
设置为.each()
回调中正在迭代的项目。如果您希望可以访问外部this
,则可以执行以下常见操作:
var self = this;
然后,请参阅self
处理程序中的.each()
。
但是,既然你已经在做了:
var $elm = this;
你可以在$elm
处理函数中使用.each()
。
在javascript中,您应该记住,所有函数调用都会根据函数的调用方式更改this
的值。
听起来我觉得在将{{1}}分配给this
之前,应检查$elm
设置的内容,因为它可能存在错误。如果是这种情况,则问题可能在于您致电recurseHtml()
的方式,这会导致您失去所需的this
值。
请记住,在Javascript中,每个函数调用都会根据函数的调用方式更改this
的值。常规函数调用会清除this
的值(如果以严格模式运行,则为全局对象或undefined
)。方法调用将this
设置为调用该方法的对象。可以使用.apply()
或.call()
或.bind()
来指定this
的确切值。
答案 1 :(得分:2)
$ elm的范围不会丢失或未定义,如果在该范围的代码中未引用$ elm,则无法从开发工具控制台获取它。通过引用$ elm,我已经证明范围从未丢失,确实在范围内#34;
答案 2 :(得分:0)
jQuery .each为数组的每个元素创建一个回调函数,如:
$.each([ 52, 97 ], function( index, value ) {
alert( index + ": " + value );
});
尝试创建全局变量。例如:
$.each([ 52, 97 ], function( index, value ) {
if(value == 52) {
xxx = 'value here'; //don't use "var xxx" if you need pass the value to the next iteration
}
console.log(xxx);
});
有关Javascript Scope的更多详细信息,请访问:http://www.w3schools.com/js/js_scope.asp