jquery - jQuery 每个函数的作用域

标签 jquery google-chrome-devtools

我不明白为什么 $elm 的范围在 jQuery every 循环中丢失。 $elm 的范围在第 76,77 行上是固定的,然后在第 78 行的循环中丢失。我做错了什么?

这是显示代码的图像。

code

我添加了这张图片(引用我的评论)作为证据,证明只要以任何方式引用 $elm ,我就可以在控制台上使用它。

Reference to my comment below

最佳答案

编辑:

事实证明,真正的问题是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/

相关文章:

javascript - 如何克隆和进行多次替换

javascript - 获取数组内的元素并与数字进行比较

javascript - Bootstrap 工具提示不会在 <a> 标签点击时隐藏

javascript - 在 Chrome Devtools 中监听对 CSS 类所做的更改

css - 为什么 Chrome Dev Tools 不显示 "computed"选项卡?

javascript - 按钮上的 jQuery 单击查找 <li> 的标签

javascript - 将数据从 Laravel $collection 传递到 jquery 循环

dart - 如何从Chrome DevTools访问Dart变量?

google-chrome - bis_skin_checked ="1"是什么意思?使用 chrome 代码源 View 时它显示在我的大部分元素上?

google-chrome - Google Chrome 设备框架在打开时不可见