同名的js匿名函数与函数声明的运行问题
var aa = function(){
alert("2");
}
function aa(){
alert("1");
}
如上设置两个函数,然后执行
aa()
, 这时得到的结果是2,为什么呢?
edWarts
9 years, 5 months ago
Answers
Psyche
answered 9 years, 5 months ago
我从没看到过js里“函数声明先于函数字面量赋值”这种说法;
js代码运行分为
变量预解析
和
代码逐行执行
两个过程;
就你这段代码来说:
1、变量预解析阶段;首先会预先声明第一行带有
var
关键字的变量
aa
,(只声明而不赋值定义,此时aa的值是
undefined
);然后会对第五行带
function
关键字的
aa
变量进行声明和赋值(既声明又赋值);预解析阶段结束后
aa
的值已经是后一个函数的值;
2、然后是代码逐行执行;第一行,将
aa
赋值为一个函数,第五行的函数声明已经参与了预解析,因此会跳过这段不执行。
所以
aa
最后的值是第一个函数。
阿道夫·希特勒
answered 9 years, 5 months ago