扫码关注官方订阅号
在js中函数声明的优先级不是最高的吗?为什么输出的反而是变量申明的函数?
ringa_lee
上面的函数声明和变量声明提升之后的执行情况如下:
var aa; function aa(){ alert(22222222); }; aa = function(){ console.log(11111); };
这样的话执行 aa(); 的话当然就是 11111啦跟优先级没有关系呀,只跟执行顺序有关,前面的被后面覆盖掉啦。我的理解是这样的,如有错误,望指正
aa();
11111
的确函数声明的优先级是最高的,使用 function 关键字声明,JS 解释器会将其提至作用域最顶端,也就是说题主的写法相当于是如下:
var aa = function() {alert("2222222")}; var aa = function() {console.log("111111")};
是的,函数声明提升的优先级比变量声明的优先级高,但是,变量提升的是var aa,后面的赋值并没有被提升,而函数声明function aa(){}会整个函数提升,此时编译时aa是function aa(){alert('2222')}! 然后,进行一行一行代码解析时,第一行其实是aa = function(){console.log('1111')},于是把aa改成function(){console.log('1111')},然后下面就没有代码可以解析了,因为函数声明已经提前解析了!所以最后aa的值就是function(){console.log('1111')}
@wangfulin 回答的很好啊,js预解析后,情况就是他说的那样,会先把所有变量的声明放前面,然后是函数声明,也就是:
var aa; //变量声明提前,这时候aa是undifined function aa(){ //函数声明提前,相当于aa=function() {alert("2222222")};但是并没有执行,只是给aa赋值了。这时候打印aa,aa为函数 alert(22222222); }; aa = function(){ //函数表达式给aa赋值,aa = function() {console.log("111111")}; 这时候aa是另一个函数,然后执行,打印11111 console.log(11111); };
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
上面的函数声明和变量声明提升之后的执行情况如下:
这样的话执行
aa();的话当然就是11111啦跟优先级没有关系呀,只跟执行顺序有关,前面的被后面覆盖掉啦。我的理解是这样的,如有错误,望指正
的确函数声明的优先级是最高的,使用 function 关键字声明,JS 解释器会将其提至作用域最顶端,也就是说题主的写法相当于是如下:
@wangfulin 回答的很好啊,js预解析后,情况就是他说的那样,会先把所有变量的声明放前面,然后是函数声明,也就是: