关于 函数内的变量提升

来源:16-11 作用域和闭包--解题-代码演示

Harry4079265

2019-02-03

function foo(a) {
    var a;
    return a;
}
function bar(a) {
    var a = 'bye';
    return a;
}
[foo('hello'), bar('hello')]//输出结果为:hello,bye

两个函数内部的 return a; 根据作用域链寻找都是返回函数作用域的 a 吧。
第二个输出我可以理解,可是第一个的输出结果是 hello ,
第一个函数的a 不是undefined 吗?

写回答

2回答

熬夜对身体不好所以要通宵

2019-05-07

会不会是形参的优先级的问题

0
0

双越

2019-02-03

看代码理解,应该如你所说:第一个函数输出 undedinfed ,但是实测输出 hello 。(而且,我还怀疑不同的执行环境,输出结果不一样,尚未验证)

对应这个问题,其细节我也需要再详细查查,这涉及到 js 引擎的内部处理机制了。

—— 不过,这种情况在日常开发中基本不会出现,而且也强烈不建议写这样变量重复定义的代码。因此,在实际应用层面无需就纠结干问题。

0
0

BAT大牛带你横扫初级前端JavaScript面试(第二版)

BAT高级前端工程师亲授,结合真实面试题,提高面试成功几率

4268 学习 · 817 问题

查看课程