开发者社区> 问答> 正文

关于JS函数声明的问题?报错

sayTruth();
function sayTruth(){alert('myvin is handsome')};

上述代码是把声明提前,没问题, 但把代码变一下:

sayTruth();
if(1){
    function sayTruth(){alert('myvin is handsome')};
}

chrome console就会报错:

Uncaught TypeError: sayTruth is not a function

请问这是为什么

展开
收起
爱吃鱼的程序员 2020-06-08 10:48:33 379 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    虚拟机运行时首先进行预处理,可以正确的把变量声明重写。第一个,虽然你的代码那样写的,但是预处理或者预编译会重写你的代码,把函数声明放在前面。第二个,因为在预处理/编译期无法确定if里面的内容,所以不会重写。

    回复 @JaedongLee:对,预处理还不会执行代码里边的逻辑,仅仅是对语法树调整谢谢,请问是否是在预处理期只是对声明进行预处理,而不会执行代码,所以无法获取到if里面的functionsayTruth

    作用域

    沙书记,我是小白,请说详细点你调用方法的时候,if还没执行呢
    2020-06-08 11:14:08
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
JavaScript面向对象的程序设计 立即下载
Delivering Javascript to World 立即下载
编程语言如何演化-以JS的private为例 立即下载