Javascript jquery中的变量在定义时没有var,给出了uncaughtreferenceerror
我的javascript文件中的一段代码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(…)您有语法错误。它应该可以工
$(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插件。如果函数和变量都在全局执行上下文中,那么movinggsdk={}
有什么不同吗在添加我的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。