同名的js匿名函数与函数声明的运行问题



 var aa = function(){
    alert("2");
}

function aa(){
    alert("1");
}

如上设置两个函数,然后执行 aa() , 这时得到的结果是2,为什么呢?

前端 function JavaScript

edWarts 9 years, 5 months ago
Psyche answered 9 years, 5 months ago

因为函数声明先于函数字面量赋值,所以前者的引用被后者修正了,重新指向了后者。

邪恶的路路花 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

Your Answer