0

下面是我的 Javascript 文档,它在$(document).ready(). Javascript 是从我网站的页脚加载的。为简化起见,我[...]替换了不相关的代码。

// When the document is ready, run the display scripts
$(document).ready(function() {

// Define the frame height functions
function getDocHeight(doc) {
    [...]
}
document.domain = 'mysite.com';

function resizeIframe() {setIframeHeight('date-price-book');}

function setIframeHeight(ifrm) {
    [...]
}

function AutoResize() {
    resizeIframe();
    resizeIframe();
    setTimeout("AutoResize()", 500);
}

AutoResize();

[... more Javascript code...]

当我运行页面时,我收到错误:Uncaught ReferenceError: AutoResize() is not defined.

我可以通过注释掉该行AutoResize();(上面示例代码中的最后一行)来阻止此错误的发生。但是为什么会抛出这个错误呢?肯定 AutoResize() 函数刚刚在它上面的行中定义了吗?

谢谢你的帮助!

4

3 回答 3

3
setTimeout("AutoResize()", 500);

执行上面的 setTimeout 时,它会在全局范围内评估字符串。AutoResize() 隐藏在闭包内,因此找不到。

使用名称分配对函数的引用。

setTimeout(AutoResize, 500);

另一个选项是闭包

setTimeout(function() { AutoResize(); }, 500);

如果要向函数发送参数,可以使用闭包方法。

于 2012-08-02T19:10:19.297 回答
1

因为您在闭包AutoResize内部定义$(document).ready(function () { ... } );,所以它在全局范围内不可用(这很好)。

当您在调用时使用字符串而不是函数引用setTimeout(这很糟糕)时,假设该字符串将解析为的函数调用是全局可用的(因为setTimeoutwindow/global 范围内运行)。

于 2012-08-02T19:10:37.550 回答
-1

我不知道。当我尝试这部分时它会起作用。

function AutoResize(){      
    console.log('test');
    setTimeout('AutoResize()',1000);
}
AutoResize();

也许是在其他地方出了问题。

于 2012-08-02T19:20:00.427 回答