【问题标题】:Scope of javascript variable declared inline内联声明的javascript变量的范围
【发布时间】:2010-11-23 11:42:15
【问题描述】:

这里是问题脚本:

这是来自 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 将是一个全局范围的变量,因此它应该可以从任何地方访问。

【问题讨论】:

  • 你肯定可以访问 devices_record。我认为您还缺少其他东西。这是确切的代码还是您创建了一个示例来说明问题?

标签: javascript variables scope global


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

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

    此外,赋值运算符不会导致“设备_记录未定义”错误,因为您正在使用赋值运算符定义它。

    您的错误可能是由其他原因引起的。

    【讨论】:

    • 关于作业的要点。显示提问者忽略了产生错误的真实代码。
    【解决方案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"

    您的问题存在于代码的其他地方。

    【讨论】:

    • 你是对的。问题确实存在于代码中的其他地方。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-03
    • 2016-09-18
    相关资源
    最近更新 更多