Javascript 为什么这个关闭没有像我期望的那样起作用?
我有以下html和javascript(jQuery):Javascript 为什么这个关闭没有像我期望的那样起作用?,javascript,jquery,closures,Javascript,Jquery,Closures,我有以下html和javascript(jQuery): ... ... ... ... ... ... 功能循环($container){ setInterval(函数(){ $active=$container.find(“:最后一个子项”) $next=$active.prev(); $next.css({opacity:0}); $next.insertAfter($active); $next.animate({opacity:1},500,function()){ $active.
...
...
...
...
...
...
功能循环($container){
setInterval(函数(){
$active=$container.find(“:最后一个子项”)
$next=$active.prev();
$next.css({opacity:0});
$next.insertAfter($active);
$next.animate({opacity:1},500,function()){
$active.insertBefore($container.find(“:first child”);
});
}, 3500);
}
$(函数(){
循环($('.container-a'));
循环($('.container-b'));
})
当我在.container-a或.container-b中的一个或另一个上运行cycle(..)时,一切正常(通过在不透明度转换后将最后一个元素移动到容器的开头,元素会一个接一个地褪色)。然而,当我像上面一样在这两个组件上运行cycle时,container-a中的元素就不能正常转换
我知道这是因为一个闭包问题,因为当我逐步浏览代码时,有时会运行animation complete函数,$container是.container-a,但$active.parent()和$next.parent()是.container-b。我很难弄清楚为什么会出现这种情况以及如何解决它。$next是一个全局变量。将“var”添加到此行开头:
$next = $active.prev();
$next是一个全局变量。将“var”添加到此行开头:
$next = $active.prev();
$next是一个全局变量。将“var”添加到此行开头:
$next = $active.prev();
$next是一个全局变量。将“var”添加到此行开头:
$next = $active.prev();
您没有对任何变量声明使用
var
,因此它们都是隐式全局变量。您没有使用闭包的变量作用域行为,因为您的函数都没有局部变量
相反,您必须使用var
:
var $active = $container.find(':last-child')
var $next = $active.prev();
严格模式不允许隐式全局变量。如果您添加了“使用严格”
到setInterval
回调的顶部(或整个文件的顶部),您将看到未定义$active
的错误
另请参见您没有对任何变量声明使用
var
,因此它们都是隐式全局变量。您没有使用闭包的变量作用域行为,因为您的函数都没有局部变量
相反,您必须使用var
:
var $active = $container.find(':last-child')
var $next = $active.prev();
严格模式不允许隐式全局变量。如果您添加了“使用严格”
到setInterval
回调的顶部(或整个文件的顶部),您将看到未定义$active
的错误
另请参见您没有对任何变量声明使用
var
,因此它们都是隐式全局变量。您没有使用闭包的变量作用域行为,因为您的函数都没有局部变量
相反,您必须使用var
:
var $active = $container.find(':last-child')
var $next = $active.prev();
严格模式不允许隐式全局变量。如果您添加了“使用严格”
到setInterval
回调的顶部(或整个文件的顶部),您将看到未定义$active
的错误
另请参见您没有对任何变量声明使用
var
,因此它们都是隐式全局变量。您没有使用闭包的变量作用域行为,因为您的函数都没有局部变量
相反,您必须使用var
:
var $active = $container.find(':last-child')
var $next = $active.prev();
严格模式不允许隐式全局变量。如果您添加了“使用严格”
到setInterval
回调的顶部(或整个文件的顶部),您将看到未定义$active
的错误
另请参见在闭包中变量声明之前应使用“var”,以使其保持私有。在闭包中变量声明之前应使用“var”,以使其保持私有。在闭包中变量声明之前应使用“var”,以使其保持私有。您应使用“var”在闭包中声明变量之前,使其保持私有