jquery - Why I always get 'false' value in my case? -


i have function in testfun.js

var testfunc=function{     var hascar=false;     return{       checkcar: function(){            for(var i=0; i<5; i++){                mycar.check(hascar); //defined in following mycar.js            }       }    }  }(); 

another function in mycar.js

var mycar=function(){      var createcar=function(){             //create car              //var car = new car();      }      return{          check: function(hascar){                console.log(hascar); //problem here: fierbug console output "false" check_button has been clicked, why?                var handler=function(){                   if(!hascar)                       createcar();                       hascar=true;                }                //check_button button on ui                check_button.click(handler);          }      } }(); 

as see in mycar module pattern, when check_button clicked, call createcar() function, , change hascar value false true.

the hascar defined in testfunc module pattern, , pass mycar.check(hascar).

i have firebug console output inside mycar.check() function, expect when mouse clicked check_button, console output true, false, why?? use hascar check check_button has been clicked once or not, if hold false value, can not know it. how rid of this?

primitive values passed by value , not reference.

thus assigning true hascar inside click event handler (in mycar.check) not change value of hascar defined in testfunc.

you use object instead:

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);          }      } }()); 

or define hascar variable in scope accessible both functions.

update:

you still false in console because hascar.val set true after clicked button , never call console.log when click button.

using loop here not tell anything. more appropriate testing be, given setup:

var hascar = {val: false}; mycar.check(hascar);    // output false // click button mycar.check(hascar);    // output true 

have @ demo.


further notes:

  • for better compatibility, surround self invoking functions parenthesis.
  • you adding new click handler every time mycar.ceck called. don't think desired.
  • the structure of application quite confusing (at least me ;)).

Comments