jQuery中的每个函数的范围

时间:2014-10-22 20:40:51

标签: jquery google-chrome-devtools

我无法弄清楚为什么$ elm的范围在jQuery的每个循环中丢失了。 $ elm的范围是稳固的:76,77然后在78的循环内丢失。我做错了什么?

这是显示代码的图片。

code

我添加了这张图片(参考我的评论)作为证据,只是通过引用$ elm,然后我可以在控制台上使用它。

Reference to my comment below

3 个答案:

答案 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