Примитивные значения передаются по значению и не по ссылке .
Таким образом, присвоение true
для hasCar
внутри обработчика событий щелчка (в MyCar.check
) не меняет значение hasCar
, определенное в testFunc
.
Вы можете использоватьвместо объекта:
var testFunc= (function(){
var hasCar = {val: false};
// ...
}());
var MyCar=(function(){
//...
return{
check: function(hasCar){
console.log(hasCar.val);
var handler=function(){
if(!hasCar.val)
createCar();
hasCar.val=true;
}
CHECK_BUTTON.click(handler);
}
}
}());
Или определите переменную hasCar
в области видимости, доступной для обеих функций.
Обновление:
Вы будетевсе равно получите false
в консоли, потому что hasCar.val
устанавливается на true
только после нажатия кнопки, и вы никогда не вызываете console.log
, когда нажимаете кнопку.
Использование цикла здесь не говоритВы что-нибудь.Более подходящим для тестирования будет, учитывая ваши настройки:
var hasCar = {val: false};
MyCar.check(hasCar); // will output false
// now click the button
MyCar.check(hasCar); // will output true
Посмотрите на это DEMO .
Дополнительные примечания:
- Для лучшей совместимости окружите свои самовывозные функции круглыми скобками.
- Вы добавляете новый обработчик щелчков при каждом вызове
MyCar.ceck
.Я не думаю, что это желательно. - Структура вашего приложения довольно запутанная (по крайней мере, для меня;)).