var b=1;
function c()
{
alert(b);
if(!b)
{
var b=2;
}
alert(b)
}
c()
//第一个b是undefined 第二个是2 我想知道整个函数的执行流程,我在想是不是像下面所说的方式执行的。因为局部函数声明变量,变量声明提升,于是,第一步先是var b。第二步alert(b)。这时候b是undefined了。然后执行if语句,符合,则b=2。第三步alert(b),即弹出b=2.我个人是这样理解的,不知道对还是错,求指正。
如果我上面的理解是正确的,我想问个问题,变量声明提升,不是在if语句里面提升的吗?而是提升到了局部函数里面?那么这个判断语句的作用是什么?
求解一条JavaScript的面试题,关于变量声明的
答案:2 悬赏:50 手机版
解决时间 2021-01-28 05:20
- 提问者网友:回忆在搜索
- 2021-01-27 14:26
最佳答案
- 五星知识达人网友:一叶十三刺
- 2021-01-27 15:27
首先你的理解是对的。
至于后面的疑问,其实是你遗漏了一点。这里第一个alert(b),输出是undefined,这就说明,在局部函数里面,由于有变量声明提升的存在,在函数外面的全局变量b,被局域函数里声明的变量b给覆盖掉了。
如果我们将if条件里面的var b = 2改成 b = 2,就可以明显的看到,第一个alert(b)输出的结果会是1,而if条件语句也不会执行。
看到这里,比较下上面说的这个区别,你就应该明白。其实这个if语句,是用来让你更好地理解作用域与变量声明提升问题的。
至于后面的疑问,其实是你遗漏了一点。这里第一个alert(b),输出是undefined,这就说明,在局部函数里面,由于有变量声明提升的存在,在函数外面的全局变量b,被局域函数里声明的变量b给覆盖掉了。
如果我们将if条件里面的var b = 2改成 b = 2,就可以明显的看到,第一个alert(b)输出的结果会是1,而if条件语句也不会执行。
看到这里,比较下上面说的这个区别,你就应该明白。其实这个if语句,是用来让你更好地理解作用域与变量声明提升问题的。
全部回答
- 1楼网友:封刀令
- 2021-01-27 16:54
虽然我很聪明,但这么说真的难到我了
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯