2016-08-02 26 views
0

我有我的mycode.js变量2

(function($) { 
    function2() { 
     console.log("main func: " + g_var); 
    } 
}(jQuery)); 

我使用的代码在主HTML代码

<script type="text/javascript" src="mycode.js"></script> 
(function ($) { 
    var g_var = 10; 
    console.log("func2: " + g_var); 
    function2(); 
} 

g_var不功能2中可见

Uncaught ReferenceError: function2 is not defined
Uncaught ReferenceError: g_var is not defined

我该如何纠正它?

回答

0

您应该阅读关于声明范围的内容。几乎所有的编程语言都会发现varibale和函数作用域的这种行为。

答:

解决你的问题,你必须创建function2IIFE的,否则就只能在里面使用。然后使用参数传递值。

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

eisbehr是正确的,你首先需要定义你FUNC出IIFE的那么yoi应该定义外面的一切您的变量。然后你可以在每个函数和代码片段中使用该js文件中的变量。

你应该这样写你的代码。

var g_var; 

function function1(){ 
    g_var=4; 
    console.log("main func: " + g_var); 
} 

function function2(){ 
     g_var=10; 
     console.log("func2: " + g_var); 
} 
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);