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);
}
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);
}
函数定义语句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 詞法分析結束並不能確定調用的函數到底是啥,得到運行時才能確定(這也是優化困難的原因之一)
10 回答11.3k 阅读
5 回答4.9k 阅读✓ 已解决
4 回答3.2k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
3 回答2.4k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
第二种
希望对你有帮助