2016-08-02 32 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);