mag*_*nta 5 javascript jquery closures scope function
我正在尝试将一些现有的顶级函数组合在一个闭包中(以避免污染全局命名空间),但我并没有完全使用它.
首先,所有的JS都在我的匿名函数之外工作,但是一旦我把它放在匿名函数中,我得到一个错误"crossfade is not defined".有没有人看到我遗失的任何完全明显的东西?
我不太明白为什么setInterval/crossfade在匿名函数之外工作但不在内部.start()内部的任何内容应该能够看到start()之外的vars /函数,并且它应该在顶级匿名函数创建的闭包中受到保护吗?我不是想在 crossfade()中访问任何东西,我只是想尝试执行它.
(function($) {
//vars up here that internal functions can access
//also using some jquery inside here, so using $
function crossfade() {
//body here
}
//other functions
function start() {
//body here
cInterval = setInterval('crossfade()', 5000);
}
})(jQuery);
Run Code Online (Sandbox Code Playgroud)
使用setInterval('crossfade()', 5000);不创建闭包 - 它创建一个字符串为eval()d.你应该使用一个函数:
setInterval(function() { crossfade(); }, 5000);
Run Code Online (Sandbox Code Playgroud)
该setInterval方法将在窗口范围内运行,因此不存在交叉淡化功能.您必须创建一个匿名函数,以便创建一个包含对该函数的引用的闭包:
cInterval = window.setInterval(function() { crossfade(); }, 5000);
Run Code Online (Sandbox Code Playgroud)