javascript - js的词法分析
PHP中文网
PHP中文网 2017-04-10 15:28:51
[JavaScript讨论组]
x();
var x = function(){
    console.log(1);
}

function x(){
   console.log(2);
}
x();

像这种先输出 2 在输出 1,词法分析我理解的过来,我就想知道在词法分析后,函数正式执行的时候,函数声明式

function x(){
   console.log(2);
}

是不是就不再执行了,函数表达式还会执行

var x = function(){
    console.log(1);
}
PHP中文网
PHP中文网

认证0级讲师

全部回复(3)
伊谢尔伦
x(1);//1 输入的结果是 function x(x){...}执行结果,因为函数定义式提升了
var x = function(x){
console.log(x);
}

function x(x){
   console.log(x);
}
x(2)    //2 执行的是var x=function(x){...}定义的函数结果  
        //可以理解为就近原则(不是肉眼的就近,因为函数 
        //定义方式提升了,x(2)靠近了var x=function(){...} );

第二种

x(1);//undefined  因为var x=function(){} 不会提升 
var x = function(x){
console.log(x);
}
x(2) //2 

希望对你有帮助

天蓬老师

函数定义语句function x(){console.log(2)}是在解析时在内存中构建;
而函数表达式x = function(){console.log(1)}则是在运行时进行运算的。

至于词法分析只是解析过程的第一步而已,与函数定义语句 和 函数表达式是如何构建没有什么关系

阿神
x();
var x = function(){
    console.log(1);
}

function x(){
   console.log(2);
}
x();

這道題和編譯原理無關,純粹是由於以上內容等價於

var x;
x = function(){
   console.log(2);
}
x();
x = function(){
    console.log(1);
}
x();

實際上就是函數聲明提升。
js 詞法分析結束並不能確定調用的函數到底是啥,得到運行時才能確定(這也是優化困難的原因之一)

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号