我的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文件并运行时,
Uncaught ReferenceError: gsdk is not defined(…)
最佳答案
该代码依赖于The Horror of Implicit Globals¹,在其中分配给未声明的标识符会创建一个全局变量。
为了得到您所描述的错误,在运行代码之前,必须先触发ready
“事件”,因为jQuery的ready
功能比较混乱:如果页面已经准备就绪,它将同步调用其回调;如果不是,它将异步调用它。
如果它是异步调用回调的,则不会出现错误,因为分配给gsdk
的代码将在回调中的代码之前运行,从而创建全局变量并为其提供值。
无论如何,解决方法是:
声明gsdk
,不要依赖隐式全局变量的恐怖,并且
将其初始化移到您的ready
代码上方,以便如果同步调用ready
回调,则gsdk
将被初始化并可以使用。
例如。:
// 1. Declare the variable, don't rely on The Horror of Implicit Globals.
// 2. Make certain it has its value before setting up your `ready` callback, since
// apparently you're doing this when the page is already ready.
var gsdk = {
init : some function...
};
$(document).ready(function(){
gsdk.init();
});
¹(这是我贫乏的小博客上的帖子。)