扫码关注官方订阅号
var aa = function(){ alert("2"); } function aa(){ alert("1"); }
如上设置两个函数,然后执行 aa() , 这时得到的结果是2,为什么呢?
aa()
光阴似箭催人老,日月如移越少年。
我从没看到过js里“函数声明先于函数字面量赋值”这种说法;
js代码运行分为变量预解析和代码逐行执行两个过程; 就你这段代码来说: 1、变量预解析阶段;首先会预先声明第一行带有var关键字的变量aa,(只声明而不赋值定义,此时aa的值是undefined);然后会对第五行带function关键字的aa变量进行声明和赋值(既声明又赋值);预解析阶段结束后aa的值已经是后一个函数的值; 2、然后是代码逐行执行;第一行,将aa赋值为一个函数,第五行的函数声明已经参与了预解析,因此会跳过这段不执行。 所以aa最后的值是第一个函数。
var
aa
undefined
function
因为函数声明先于函数字面量赋值,所以前者的引用被后者修正了,重新指向了后者。
题主可以看看这篇文章 http://bonsaiden.github.io/JavaScript-Garden/zh/#function.general
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
我从没看到过js里“函数声明先于函数字面量赋值”这种说法;
js代码运行分为变量预解析和代码逐行执行两个过程;
就你这段代码来说:
1、变量预解析阶段;首先会预先声明第一行带有
var关键字的变量aa,(只声明而不赋值定义,此时aa的值是undefined);然后会对第五行带function关键字的aa变量进行声明和赋值(既声明又赋值);预解析阶段结束后aa的值已经是后一个函数的值;2、然后是代码逐行执行;第一行,将
aa赋值为一个函数,第五行的函数声明已经参与了预解析,因此会跳过这段不执行。所以
aa最后的值是第一个函数。因为函数声明先于函数字面量赋值,所以前者的引用被后者修正了,重新指向了后者。
题主可以看看这篇文章 http://bonsaiden.github.io/JavaScript-Garden/zh/#function.general