Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么这个关闭没有像我期望的那样起作用?_Javascript_Jquery_Closures - Fatal编程技术网

Javascript 为什么这个关闭没有像我期望的那样起作用?

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.

我有以下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.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”在闭包中声明变量之前,使其保持私有