2.var a; function a(){} a=1; alert(a);这里输出1,我想问的是js的作用域链中,同一作用域内函数在变量前,所以1可理解,但2为啥输出1啊,求大神解释。
其余的人貌似连作用域链都不知道,你的意思是定义var a:作用域链里有变量a,值为undefined,后面定义了function a(){},作用域链里只有函数a,变量a被覆盖了,后面a=1;时,函数a又被覆盖,a变为变量,值为1吗,麻烦了
追答具体在JS内部是如何处理这两个a的我还真不清楚,或许函数a和变量a都存在于JS内部,但你在调用时JS无法区分你要调用哪一个,或者说JS只是按他的顺序将找到的第一个返回给你.而这个顺序可能是变量,函数.
JS是预编译机制会使函数定义被优先处理,所以即使改变语句顺序也不会改变输出结果,就好比
var a;
a=1;
function a(){}
alert(a);
结果依然是数值1,而不是函数.
所以要解释这个问题可能要深入研究JS的内部.
我没有说要执行函数,可能我没说清楚,我想问的是alert(a)时,js引擎怎么去找a这个变量的值,如果有一个函数和变量同名,js引擎取哪一个,依据啥取