我不明白为什么 $elm 的范围在 jQuery every 循环中丢失。 $elm 的范围在第 76,77 行上是固定的,然后在第 78 行的循环中丢失。我做错了什么?
这是显示代码的图像。
我添加了这张图片(引用我的评论)作为证据,证明只要以任何方式引用 $elm ,我就可以在控制台上使用它。
最佳答案
编辑:
事实证明,真正的问题是OP没有看到 $elm
的值(value)当位于 .each()
内的断点时,会自动在 Chrome 调试器中列出环形。这是因为 Chrome 仅在 scope variables
中显示实际本地作用域中使用的变量。调试器部分和 $elm
此时位于父作用域中,而不是本地作用域中。
通过将变量的名称放入监视表达式中,可以查看作用域内的任何变量,包括父作用域中的变量。
<小时/> jQuery.each()
套this
到 .each()
中正在迭代的项目打回来。如果你想要外层this
为了易于访问,常见的解决方法是:
var self = this;
然后引用self
里面.each()
处理程序。
但是,既然你已经这样做了:
var $elm = this;
您可以使用 $elm
里面就好了.each()
处理函数。
在 javascript 中,您应该记住所有函数调用都会更改 this
的值根据函数的调用方式。
在我看来,你应该检查一下 this
在将其分配给 $elm
之前设置为因为那里可能是错误的。如果是这种情况,那么问题可能出在您如何调用 recurseHtml()
上。这会导致您失去所需的 this
值.
请记住,在 Javascript 中,每个函数调用都会更改 this
的值根据函数的调用方式。常规函数调用会清除 this
的值(如果在严格模式下运行,则为全局对象或undefined
)。方法调用集this
成为调用该方法的对象。可以使用.apply()
或.call()
或.bind()
指定 this
的精确值.
关于jquery - jQuery 每个函数的作用域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26516717/