为什么我的代码无法访问此变量?

时间:2017-05-17 10:09:14

标签: javascript highcharts requirejs

我正在尝试使用SDK为另一个程序构建扩展。代码是用JavaScript编写的。

我使用SDK的内置requireJS功能在外部库(Highcharts)中加载。

然而,当我尝试通过Highcharts变量访问Highcharts时,浏览器告诉我它未定义。

我尝试将console.log(this)添加到我的代码中,之后它应该被加载,你可以在图像中看到下面的输出。 Highcharts似乎已被加载。当我尝试console.log(EPCMPROXY)时,我得到了那个对象,但是当我尝试console.log(Highcharts)时,我得到了未定义。如果我打开浏览器窗口的控制台,并手动键入Highcharts,它将返回该对象。我做错了什么,或者错误地引用了Highcharts?当它们在同一范围内时,我怎么可能访问一个对象(EPCMPROXY)而不能访问另一个对象(Highcharts)?

代码:

console.log(this);
console.log(Highcharts);
console.log(EPCMPROXY);  //some var generated by the page, used as example here

console.log(this)的输出:

j {owner: f, init: function, componentDeleted: function, beforeUpdate: function, afterUpdate: function…}
    $:function ()
        arguments : null
        caller : null
        length : 0
        name : ""
        prototype : Object
        __proto__ : function ()
        [[FunctionLocation]] : combined_static_includes_1.jsversion=20170105152024:25
        [[Scopes]]:Scopes[2]
            0 : Closure (a)
            1 : Global
                $ : function (e,i)
                AsyncHandleJavascriptError : function AsyncHandleJavascriptError(a)
                EPCMPROXY : Object
                ES6Promise : Object
                Highcharts : Object

console.log(Highcharts)的输出:

undefined

console.log(EPCMPROXY)的输出:

Object
  ...

Console Screenshot

1 个答案:

答案 0 :(得分:0)

问题是当行" console.log(Highcharts)"执行后,它还没有实际加载(由于我的requireJS设置问题)。我执行时可以看到它的原因" console.log(this)"正如dsfq指出的那样,它显示了可能以后加载的对象,因为它是异步运行的。小蓝"我"图标,可以在屏幕截图中看到,实际上是来自Chrome的工具提示,其中指出:"下面的价值刚刚评估了#34;。