javascript变量的范围内联声明

时间:2009-08-27 18:01:04

标签: javascript variables scope global

以下是问题脚本:

这是来自HTML文件:

<script type="text/javascript">
    var devices_record = "some string";
</script>
<script type="text/javascript" src="/js/foo.js"></script>

这是来自foo.js:

function bar () {
    devices_record = "assign new string";
}

HttpFox的错误报告是未定义devices_ record。是什么赋予了?我认为devices_ record将是一个全局范围的变量,因此它应该可以从任何地方访问。

3 个答案:

答案 0 :(得分:3)

您的测试用例适合我。这是我的完整测试:

foo.js:

function bar () {
    alert(devices_record);
    devices_record = "assign new string";
    alert(devices_record);
}

foo.html:

<html>
<head>
    <script type="text/javascript">
    var devices_record = "some string";
    </script>
    <script type="text/javascript" src="foo.js"></script>
</head>
<body onload="bar()">
</body>

我收到两个提醒,第一个显示"some string",第二个显示"assign new string"

您的问题存在于代码的其他位置。

答案 1 :(得分:1)

我相信你给出的代码有效。至少执行上面给出的代码不会导致任何错误。

此外,在使用任何内联js之前,最好包含foo.js之类的依赖项。这样可以确保在调用库提供的函数之前加载库。

此外,赋值运算符不会导致'devices_ record not defined'错误,因为您正在使用赋值运算符定义它。

您的错误可能是由其他原因造成的。

答案 2 :(得分:0)

foo.js 中声明 devices_record 。然后,从HTML中嵌入的javascript中引用它。

您还可以考虑将 foo.js 代码封装在一个类中,并使用 devices_record 作为字段/属性。除其他外,这可以使错误捕获更加容易。

Tidbit:另外,如果在包含脚本之前放置了devices_record声明,则脚本可能能够访问它。但是,要小心在使用它们的文件之外声明变量。如果您决定将该脚本包含在忘记声明devices_record的页面中,则会遇到错误。