2015-12-08 36 views
2
function coolo() 
{ 
    var tile1 = -1; 
    var tile2 = -1; 
    $(".grid-cell").click(swap); 
} 


function swap() 
{ 
    console.log(tile1) 
} 

coolo();

當然,我會得到一個Uncaught ReferenceError: tile1 is not defined錯誤。我可以通過將變量傳遞給函數或將變量放在全局範圍中來解決它。有沒有辦法讓swap函數訪問coolo範圍內的變量?我可以訪問全局範圍內的變量,爲什麼不呢?我試過使用this關鍵字,但jquerythis分配給已選定的dom元素。我不確定是否使用this也可以在非jquery的情況下工作。如果沒有,我想了解更多關於如何作用於JavaScript的範圍。來自不同範圍變量的javascript回調函數未定義

+1

'函數交換(tile1)'...'。點擊(swap.bind(null,tile1))' – elclanrs

+0

你應該查看一些[OOP JavaScript模式](http://addyosmani.com/resources/essentialjsdesignpatterns/book/)。 – epascarello

+2

您應該閱讀JavaScript中的[詞法範圍](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Closures#Lexical_scoping)。 – saadq

回答

1

您將需要一個參數傳遞給函數,但是你可以把它多一點通用

function coolo() 
{ 
    var tile1 = -1; 
    var tile2 = -1; 
    $(".grid-cell").click(function(){swap(title1)}); 
} 


function swap(title) 
{ 
    console.log(tile) 
} 

coolo(); 
1

你想了解的範圍,這將工作。由於只使用swapcoolo,沒有理由不把swapcoolo函數內部,從而在相同的範圍內tile1

function coolo() { 
    var tile1 = -1; 
    var tile2 = -1; 
    var swap = function() { 
     console.log(tile1) 
    } 
    $(".grid-cell").click(swap); 
} 

coolo(); 
0

把它定義爲全局變量外這兩個功能或使用window.title

var title 
function A(){ 

} 
function B(){ 

} 

,或者它作爲一個參數傳遞給第二功能

function A(){ 
    B(title); 
}