var aa = function(){
alert("2");
}
function aa(){
alert("1");
}
如上设置两个函数,然后执行 aa()
, 这时得到的结果是2,为什么呢?
var aa = function(){
alert("2");
}
function aa(){
alert("1");
}
如上设置两个函数,然后执行 aa()
, 这时得到的结果是2,为什么呢?
10 回答11.1k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
3 回答5.1k 阅读✓ 已解决
3 回答1.8k 阅读✓ 已解决
我从没看到过js里“函数声明先于函数字面量赋值”这种说法;
js代码运行分为变量预解析和代码逐行执行两个过程;
就你这段代码来说:
1、变量预解析阶段;首先会预先声明第一行带有
var
关键字的变量aa
,(只声明而不赋值定义,此时aa的值是undefined
);然后会对第五行带function
关键字的aa
变量进行声明和赋值(既声明又赋值);预解析阶段结束后aa
的值已经是后一个函数的值;2、然后是代码逐行执行;第一行,将
aa
赋值为一个函数,第五行的函数声明已经参与了预解析,因此会跳过这段不执行。所以
aa
最后的值是第一个函数。