我的代码在 mycode.js
中<script type="text/javascript" src="mycode.js"></script>
我使用主HTML中的代码
(function ($) {
var g_var = 10;
console.log("func2: " + g_var);
function2();
}
g_var
但{{1}}在function2
中不可见未捕获的ReferenceError:未定义function2
未捕获的ReferenceError:未定义g_var
我该如何纠正?
答案 0 :(得分:0)
您应该阅读有关声明范围的内容。几乎每种编程语言都会发现varibale和函数作用域的这种行为。
<强>答案:强>
要解决您的问题,您必须在function2
之外创建IIFE
,否则它只能在内部使用。然后使用参数传递值。
function function2(g_var) {
console.log("main func: " + g_var);
}
(function() {
var g_var = 10;
function2(g_var);
})();
<强>增加:强>
如果在与函数相同的范围内创建变量g_var
,您也可以在function2
的内部访问它。但在大多数情况下,我不会这样做。
在某些情况下这是有道理的,比如在使用其他函数内部创建的回调时。但在大多数情况下,您应该使用第一个示例并使用参数!
(function() {
var g_var = 10;
function function2() {
console.log("main func: " + g_var);
}
function2();
})();
但实际上,在大多数情况下,这根本不是一个好主意!当你想到这样的事情时,它是有道理的:
$(".foo").each(function() {
var that = this;
$(".bar").click(function() {
// access 'that'
});
});
答案 1 :(得分:0)
您正在使用闭包,但未能返回公共方法。请参阅此示例并查看文档MDN: JS Closures
var foo = (function($) {
function f2(g_var) { // private
console.log("main func: " + g_var);
}
return {
function2: function(g_var) {
f2(g_var);
}
};
})(jQuery);
你可以像这样调用它:
foo.function2(g_var);
答案 2 :(得分:-1)
您应该像这样编写代码。
</VirtualHost>