Javascript jquery中的变量在定义时没有var,给出了uncaughtreferenceerror

Javascript jquery中的变量在定义时没有var,给出了uncaughtreferenceerror,javascript,jquery,Javascript,Jquery,我的javascript文件中的一段代码 $(document).ready(function(){ gsdk.init(); }); // Note: No var in the prefix of gsdk and it is also declared only here gsdk = { init : some function... } 当我在html页面中添加这个javascript文件并运行时,它会 未捕获引用错误:未定义gsdk(…)您有语法错误。它应该可以工

我的javascript文件中的一段代码

$(document).ready(function(){
    gsdk.init();
});

// Note: No var in the prefix of gsdk and it is also declared only here
gsdk = {
    init : some function...
}
当我在html页面中添加这个javascript文件并运行时,它会


未捕获引用错误:未定义gsdk(…)
您有语法错误。它应该可以工作

虽然gsdk在这里是一个全局变量..不使用var声明应该不会有问题,但它会在全局对象上创建一个变量,即window.gsdk/gsdk在这里是相同的,即使您在调用后声明gsdk,它也不会抛出错误,因为变量已被提升 您的代码与下面的代码类似

var gsdk;
$(document).ready(function(){
    gsdk.init();
});

gsdk = {
    init : function(){
       alert("hi");
     }
}
$(文档).ready(函数(){
gsdk.init();
});
gsdk={
init:function(){
警报(“hi”);
}
}

您有语法错误。它应该可以工作

虽然gsdk在这里是一个全局变量..不使用var声明应该不会有问题,但它会在全局对象上创建一个变量,即window.gsdk/gsdk在这里是相同的,即使您在调用后声明gsdk,它也不会抛出错误,因为变量已被提升 您的代码与下面的代码类似

var gsdk;
$(document).ready(function(){
    gsdk.init();
});

gsdk = {
    init : function(){
       alert("hi");
     }
}
$(文档).ready(函数(){
gsdk.init();
});
gsdk={
init:function(){
警报(“hi”);
}
}
该代码依赖于\,分配给未声明的标识符将创建一个全局变量

要获得您描述的错误,必须在运行代码之前触发
ready
“事件”,因为jQuery的
ready
特性很混乱:如果页面已经准备好,它会同步调用其回调;如果不是,它将异步调用它

如果它异步调用回调,则不会出现错误,因为分配给
gsdk
的代码将在回调中的代码之前运行,从而创建全局并赋予其值

在任何情况下,解决方案都是:

  • 声明
    gsdk
    ,不要依赖于隐式全局变量的恐怖,以及

  • 将它的初始化移到
    ready
    代码上方,这样,如果同步调用
    ready
    回调,
    gsdk
    将初始化并准备使用

  • 例如:


    ⑨(这是我贫血小博客上的一篇文章。)

    代码依赖于ª,分配给未声明的标识符会创建一个全局变量

    要获得您描述的错误,必须在运行代码之前触发
    ready
    “事件”,因为jQuery的
    ready
    特性很混乱:如果页面已经准备好,它会同步调用其回调;如果不是,它将异步调用它

    如果它异步调用回调,则不会出现错误,因为分配给
    gsdk
    的代码将在回调中的代码之前运行,从而创建全局并赋予其值

    在任何情况下,解决方案都是:

  • 声明
    gsdk
    ,不要依赖于隐式全局变量的恐怖,以及

  • 将它的初始化移到
    ready
    代码上方,这样,如果同步调用
    ready
    回调,
    gsdk
    将初始化并准备使用

  • 例如:



    (这是我贫血小博客上的一篇帖子。)

    你试过把
    gsdk={}
    移到
    $(document.ready()
    ?对不起
    )前面吗
    在那里我错过了它…你错过了Jquery插件。如果函数和变量都在全局执行上下文中,那么moving
    gsdk={}
    有什么不同吗在添加我的javascript文件之前,这个
    在html文件中有吗你尝试过在
    $(文档)前面移动
    gsdk={}
    ?对不起
    我错过了吗…你错过了Jquery插件。移动
    gsdk={}
    如果函数和变量都在全局执行上下文中,则有任何不同此
    在添加javascript文件之前存在于html文件中,但当我检查窗口对象时,
    gsdk
    参数存在但未定义,您将其作为窗口进行检查。gsdk@akar:那是因为(正如我在回答中所说的),正在同步调用您的
    ready
    回调。如果您只是进行上述更改,
    gsdk
    将被声明,但其值将为
    undefined
    。是的,但当我检查我的窗口对象时,
    gsdk
    参数在那里,但它未被定义,您将其作为窗口进行检查。gsdk@akar:那是因为(正如我在回答中所说的),正在同步调用您的
    ready
    回调。如果您只是进行上述更改,
    gsdk
    将被声明,但其值将为
    未定义
    。正如@Justinas建议的那样,当我将var前缀放置到gsdk并在文档准备就绪之前移动它时,调用其fixed。正如@Justinas建议的那样,当我将var前缀放置到gsdk并在文档准备就绪之前移动它时,调用其fixed。