js变量赋值

jxy401550597 2018-07-23 08:48:32
定义了一个全局变量 var cardFlag = false;
但是我在方法里使用 cardFlag 的时候值取到的是undefined,求大神指导
...全文
402 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
风中的少年 2018-07-24
  • 打赏
  • 举报
回复
引用 17 楼 jxy401550597 的回复:
[quote=引用 15 楼 silverbutter 的回复:]
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。
我理解你的说法,是有两个变量重名,一个为全局变量,另一个为局部变量,切局部变量在代码加载时未定义才会出现undefined的情况,不知道我的理解对不对。我的代码里面变量名称是唯一的,没有出现重名的变量名,而且我同时赋值了很多,但是只有两个变量的值是undefined,剩下的值都拿到了[/quote]

你还不如直接把你的代码都贴出来。这样才知道是什么原因。方便调试
jxy401550597 2018-07-24
  • 打赏
  • 举报
回复
引用 15 楼 silverbutter 的回复:
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。
我理解你的说法,是有两个变量重名,一个为全局变量,另一个为局部变量,切局部变量在代码加载时未定义才会出现undefined的情况,不知道我的理解对不对。我的代码里面变量名称是唯一的,没有出现重名的变量名,而且我同时赋值了很多,但是只有两个变量的值是undefined,剩下的值都拿到了
不正经开发者 2018-07-24
  • 打赏
  • 举报
回复
那个定义的全局变量解析提前,赋值变后面。
一行代碼 2018-07-24
  • 打赏
  • 举报
回复
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。
jxy401550597 2018-07-23
  • 打赏
  • 举报
回复
引用 2 楼 FFF279469961的回复:
还是把代码贴出来吧 光这样说不好看问题
代码我贴出来了,在5楼
jxy401550597 2018-07-23
  • 打赏
  • 举报
回复
引用 4 楼 Eclipextro的回复:
js有预解析的机制,没有看到代码,个人猜测,有可能是你的顺序写错了,导致取值为undefined
顺序应该没错,代码我贴在下面了,由于代码太多,我只是把逻辑捋了一下
jxy401550597 2018-07-23
  • 打赏
  • 举报
回复

var payDate = "1";
var CardFlag = false;
function init(){
if(cardFlag) {
chooseCard();
}
}

一开始是执行init()方法,我在init()方法里面取payDate 和cardFlag,payDate值是"1",但是cardFlag值是undefined
Eclipextro 2018-07-23
  • 打赏
  • 举报
回复
js有预解析的机制,没有看到代码,个人猜测,有可能是你的顺序写错了,导致取值为undefined
ambit_tsai-微信 2018-07-23
  • 打赏
  • 举报
回复
全局变量这样定义:

window.cardFlag = false;
FFF279469961 2018-07-23
  • 打赏
  • 举报
回复
还是把代码贴出来吧 光这样说不好看问题
讨厌走开啦 2018-07-23
  • 打赏
  • 举报
回复
函数在变量初始化前就被调用了,可以在函数的开头打印一把看看cardFlag是什么。
丶吉丶 2018-07-23
  • 打赏
  • 举报
回复
你的this指向错误
天际的海浪 2018-07-23
  • 打赏
  • 举报
回复
看看你的函数是不是在全局变量被赋值之前调用的
zousubo1230 2018-07-23
  • 打赏
  • 举报
回复
var payDate = "1";
var cardFlag = false;
function init(){
console.log(cardFlag)
if(cardFlag) {
chooseCard();
}
}
init()
我这里打印出来没问题啊 不是Undefied啊
jxy401550597 2018-07-23
  • 打赏
  • 举报
回复
大小写的问题是我打错了,代码里面是一致的所以不是大小写不一致的问题
jxy401550597 2018-07-23
  • 打赏
  • 举报
回复
引用 9 楼 丰云的回复:

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

这么粗心,不行的。。。
大写是我打错了,代码里面不是的
丰云 2018-07-23
  • 打赏
  • 举报
回复

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

这么粗心,不行的。。。
五更琉璃 2018-07-23
  • 打赏
  • 举报
回复
js 是区分大小写的

87,904

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧