看似简单的js题目引出的词法分析

今天在牛客网做练习题遇到了一个很简单的问题,疏忽大意做错了。本来做错也不值得写博文,但是看了下评论,还是觉得有很多人的看法并不正确。

var bb = 1;
function fn(bb){
    bb=2;
    alert(bb);
}
fn(bb);
alert(bb);

弹出的结果是什么?多数人做的错误答案是2;2。认为这个题考察的是在函数内部如果不使用var声明的话实际上是创建了一个全局变量。

评论中出现了两种主要的原因分析,一是占70%的函数传递参数是按值传递派,二是20%的作用域链派。其余还有少许的各种各样看法。

当我反应过来的时候,很自然想到的是词法分析/AO分析。

第一步对参数相当于执行了var bb=undefined;bb=1,第二步是bb=2这一条,所以这个bb实际上还是局部变量!对于作用域链这个说法我想也是可以的,只是没有解释明白为什么局部有bb变量。

not found!