【问题标题】:JavaScript: Accessing Variables Defined in External .js Files [duplicate]JavaScript:访问在外部 .js 文件中定义的变量 [重复]
【发布时间】:2012-06-02 18:09:10
【问题描述】:

可能重复:
Dynamically Importing JavasScript

有没有办法访问来自外部导入的 JavaScript .js 文件的变量?

在外部 .js 文件中,我定义了一个变量,如下所示:

// JavaScript Document
var PETNAME = "Beauty";

动态导入该代码后,我希望访问 PETNAME 变量,但我没有得到定义的值:

alert("Pet Name: " + PETNAME);

可能出了什么问题,有没有办法将外部 .js 代码中的值带入主 JavaScript?

谢谢。

【问题讨论】:

    标签: javascript web


    【解决方案1】:

    要动态导入 JS,您需要考虑 onreadystatechangeload 事件,这些事件在浏览器解析脚本时运行并可供您使用。你可以使用这个功能:

    function getScript(url, callback) {
       var script = document.createElement('script');
       script.type = 'text/javascript';
       script.src = url;
    
       script.onreadystatechange = callback;
       script.onload = callback;
    
       document.getElementsByTagName('head')[0].appendChild(script);
    }
    

    你可以这样使用它:

    getScript('path to your js file', function(){
      alert("Pet Name: " + PETNAME);
    });
    

    【讨论】:

    • +1 - 谢谢你的回答。您正确地了解了我的问题的根源,即我确实动态导入了 .js 文件。我将使用提出的建议。由于您的答案很明确且无需进一步补充,因此我想将其标记为我的问题的已接受答案
    • @Bunkai.Satori:很高兴看到它有帮助:)
    【解决方案2】:

    确保在尝试访问其中定义的变量之前包含外部文件。还要确保外部文件中的变量未在函数内部定义,在这种情况下,它们的范围仅限于该函数。如果这没有帮助尝试在变量之前删除关键字var,这将创建全局变量。

    【讨论】:

    • +1,非常感谢您的回答。删除 var 对我来说是新的。此外,我应该提到,我正在动态导入 .js 代码。我不知道,这对答案至关重要。谢谢。
    • 删除 var 关键字是非常糟糕的做法,它会创建全局变量并污染全局环境。
    • @Sarfraz,有没有其他方法可以确保变量是全局的?换句话说,除了删除var,还有什么更好的选择吗?
    • @Bunkai.Satori:可以使用自调用匿名函数或单例/模块模式:sarfraznawaz.wordpress.com/2012/01/26/…,但它不适用于您的情况,因为您是直接导入 js 文件。
    猜你喜欢
    • 2013-10-31
    • 1970-01-01
    • 2022-12-02
    • 2013-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-22
    相关资源
    最近更新 更多