我的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(…)
答案 0 :(得分:4)
该代码依赖于The Horror of Implicit Globals¹,其中分配未声明的标识符会创建一个全局变量。
要获得您所描述的错误,ready
“事件”必须在代码运行之前已经已经被触发,因为jQuery的ready
功能是混乱的:如果页面已经准备好,它会同步调用它的回调;如果没有,它会异步调用它。
如果它异步调用回调,则不会出现错误,因为分配给gsdk
的代码将在回调中的代码之前运行,从而创建全局并赋予其价值。
无论如何,修复方法是:
声明gsdk
,不要依赖隐式全局变量的恐怖,
将的初始化移到上面{/ 1}}代码,这样如果同步调用ready
回调,ready
就会初始化并准备就绪使用。
E.g:
gsdk
¹(这是我贫血的小博客上的帖子。)
答案 1 :(得分:1)
你有语法错误。它应该工作
虽然gsdk在这里是一个全局变量。虽然不能用var声明它不应该是一个问题,但它会在全局对象上创建一个变量,即window.gsdk / gsdk在这里是相同的,甚至你在调用后声明它是gsdk它不会抛出错误,因为变量被挂起 您的代码与以下内容类似
var gsdk;
$(document).ready(function(){
gsdk.init();
});
gsdk = {
init : function(){
alert("hi");
}
}
$(document).ready(function(){
gsdk.init();
});
gsdk = {
init : function(){
alert("hi");
}
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>