变量是未定义的

时间:2010-04-26 19:50:59

标签: javascript html undefined

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<HEAD>
<script type="text/javascript" src="lb-core.js"></script>
<script type="application/javascript">
var lbp = {
    defaults: {
        color: "blue"
    },
    init: function(config) {
        if(config) {
            for(prop in config){
                setBgcolor.defaults[prop] = config[prop];
            }
        }
        var bod = document.body;
        bod.style.backgroundColor = setBgcolor.defaults.color;
    }
}
window.onload = lbp.init();
</script>
</HEAD>
<body>
<div id="container">test</div>
</body>
</HTML>

为什么在window.onload上调用上面的内容时,bod会以未定义的形式返回?

3 个答案:

答案 0 :(得分:3)

将其更改为

window.onload = lbp.init;

当您编写window.onload = lbp.init()时,您调用 init函数,并将其返回的内容分配给window.onload
因此,该函数被立即调用 (在加载窗口之前),并且您将undefined分配给window.onload。 (因为init没有返回任何内容)

您需要将init函数本身分配给onload,而不必调用它。

答案 1 :(得分:2)

您的代码需要一些柚木,这是一个整体修复:

var lbp = {
    defaults: {
        color: "blue"
    },
    init: function(config) {
        if(config) {
            for(prop in config){
                lbp.defaults[prop] = config[prop];
            }
        }
        var bod = document.body;
        bod.style.backgroundColor = lbp.defaults.color;
    }
}
window.onload = lbp.init;

之前它正在立即调用init,因为window.onload = lbp.init()正在将lbp.init结果分配给onload函数,而不是分配实际函数,这是修复的上方。

另外,不确定代码中setBgcolor的来源,我相信你的意思是lbp,它在上面的代码中运行,给它一个测试。

答案 2 :(得分:1)

试试这个:

var bod = document.body;

我不知道为什么bod会在您的代码中以未定义的形式返回..它在Chrome中适用于我。你在运行什么浏览器?

另外,你确定它是bod未定义的吗?不是setBgcolor或其他什么?

修改

更改此行代码:

window.onload = lbp.init();

对此:

window.onload = lbp.init;

您目前正在将lpd.init()的结果分配给onload ..您只需指定参考。