Jas*_*ack 5 javascript jquery owl
我想在执行其他(可视化)脚本之前加载OWL文件.为此,我尝试了一切
$(document).ready
Run Code Online (Sandbox Code Playgroud)
至
function visualize (file) {
if (!file)
{setTimeout(visualize(file), 2000)}
else
{jQuery(function($){visFeaturePool.init(file)})}}
Run Code Online (Sandbox Code Playgroud)
我认为必须使用setTimeout,但这不起作用.我抛出错误:Uncaught RangeError:超出了最大调用堆栈大小,因此它不会等待,它只是调用可视化函数,直到堆栈已满.
有谁知道我做错了什么?谢谢!
T.J*_*der 36
代替
// #1
setTimeout(visualize(file), 2000);
Run Code Online (Sandbox Code Playgroud)
你要
// #2
setTimeout(function() {
visualize(file);
}, 2000);
Run Code Online (Sandbox Code Playgroud)
或者在现代浏览器中,您可以提供在延迟后传递给函数的参数:
// #3
setTimeout(visualize, 2000, file);
Run Code Online (Sandbox Code Playgroud)
这三个解释说:
visualize 立即调用,然后将其返回值传递给setTimeout(并且自从visualize调用本身以来,它一直以递归方式调用自身,最终导致堆栈溢出错误).setTimeout它,在调用时,将调用visualize并传递file参数.我们传入的函数setTimeout将有权访问file参数,即使您的代码已经运行并返回,因为该函数是创建它的上下文的闭包,其中包括file.更多:关闭并不复杂visualize函数引用传递给setTimeout(注意我们没有()或(file)在它之后)并且也传递file到setTimeout(延迟之后).在现代浏览器上,setTimeout稍后调用它时会将其传递给函数.(#2和#3之间有一个重要的区别:对于#2,如果file在setTimeout调用和定时器到期之间改变,visualize则会看到file新的值.但是,#3,它不会.两者都有它们的用途.)
| 归档时间: |
|
| 查看次数: |
20021 次 |
| 最近记录: |