定义了一个全局变量    var cardFlag = false;
但是我在方法里使用 cardFlag 的时候值取到的是undefined,求大神指导

解决方案 »

  1.   

    你的this指向错误
      

  2.   

    全局变量这样定义:window.cardFlag = false;
      

  3.   

    js有预解析的机制,没有看到代码,个人猜测,有可能是你的顺序写错了,导致取值为undefined
      

  4.   


    var payDate = "1";
    var CardFlag = false;
    function init(){
        if(cardFlag) {
            chooseCard();
    }
    }
    一开始是执行init()方法,我在init()方法里面取payDate 和cardFlag,payDate值是"1",但是cardFlag值是undefined
      

  5.   


    var payDate = "1";
    var CardFlag = false; //这里是首字母大写
    function init(){
        if(cardFlag) { //这里首字母小写。。
            chooseCard();
    }
    }
    这么粗心,不行的
      

  6.   

    var payDate = "1";
    var cardFlag = false;
    function init(){
    console.log(cardFlag)
        if(cardFlag) {
    chooseCard();
    }
    }
    init() 
    我这里打印出来没问题啊  不是Undefied啊
      

  7.   

    函数在变量初始化前就被调用了,可以在函数的开头打印一把看看cardFlag是什么。
      

  8.   

    js作用域链变量访问规则:    (1)、当前作用域内存在要访问的变量时,则使用当前作用域中的变量。       (2)、当前作用域中不存在要访问的变量时,则会到上一层作用域中寻找,直到全局作用域。  >>>执行顺序   js代码执行分为两个部分:  1、代码的检查装载阶段(预编译阶段),此阶段进行变量和函数的声明,但是不对变量进行赋值,变量的默认值为undefined。  2、代码的执行阶段,此阶段对变量进行赋值和函数的声明。
    var a=1; //声明了一个全局变量
    function func(){
      console.log(a); //输出:undefined。打印a,而在func这个作用域中已经声明了a变量,按照js的执行顺序,此时的a并未被赋值。
      var a=1;
      console.log(a); //输出:1。
    }
    func();
    看上面的代码:第一个a输出undefined。原因:js作用域链的访问规则,当前作用域内存在要访问的变量a,所以使用当前作用域中的变量。再根据js代码的执行顺序,此时的a只是声明了而并未被赋值,默认为undefined,所以输出undefined。  而第二个a,输出1,正是因为此时的a已经被声明且被赋值,所以a输出1。
      

  9.   

    我理解你的说法,是有两个变量重名,一个为全局变量,另一个为局部变量,切局部变量在代码加载时未定义才会出现undefined的情况,不知道我的理解对不对。我的代码里面变量名称是唯一的,没有出现重名的变量名,而且我同时赋值了很多,但是只有两个变量的值是undefined,剩下的值都拿到了