x();varx=function(){console.log(1);}functionx(){console.log(2);}x();像这种先输出2在输出1,词法分析我理解的过来,我就想知道在词法分析后,函数正式执行的时候,函数声明式functionx(){console.log(2);}是不是就不再执行了,函数表达式还会执行varx=function(){console.log(1);}
2 回答
潇潇雨雨
TA贡献1833条经验 获得超4个赞
x(1);//1输入的结果是functionx(x){...}执行结果,因为函数定义式提升了varx=function(x){console.log(x);}functionx(x){console.log(x);}x(2)//2执行的是varx=function(x){...}定义的函数结果//可以理解为就近原则(不是肉眼的就近,因为函数//定义方式提升了,x(2)靠近了varx=function(){...});第二种x(1);//undefined因为varx=function(){}不会提升varx=function(x){console.log(x);}x(2)//2希望对你有帮助
慕森王
TA贡献1777条经验 获得超3个赞
函数定义语句functionx(){console.log(2)}是在解析时在内存中构建;而函数表达式x=function(){console.log(1)}则是在运行时进行运算的。至于词法分析只是解析过程的第一步而已,与函数定义语句和函数表达式是如何构建没有什么关系
添加回答
举报
0/150
提交
取消