2015-12-08 3 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, но jquery присваивает this элементу dom, который был выбран. Я не уверен, что использование this будет работать и в ситуации, отличной от jquery. Если этого не произойдет, я хотел бы узнать больше о том, как работает область действия в javascript.Функция обратного вызова javascript с переменной переменной не определена

+1

'функция подкачки (tile1)' ... '.click (swap.bind (null, tile1)) ' – elclanrs

+0

Вы должны найти некоторые [шаблоны JavaScript ООП] (http://addyosmani.com/resources/essentialjsdesignpatterns/book/). – epascarello

+2

Вы должны прочитать о [лексическом охвате] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Closures#Lexical_scoping) в JavaScript. – saadq

ответ

1

Вы должны передать аргумент этой функции, но вы можете сделать его немного более общий

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


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

coolo(); 
1

Вы хотите знать о объеме, это будет работать. Как вы используете только swap внутри coolo, нет никаких причин не ставить swap внутри функции coolo, таким образом, в том же объеме, 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); 
} 
Смежные вопросы