JavaScript中为何可在函数定义前调用函数?
为什么能在函数定义前调用它?
这是JavaScript的**函数提升(Hoisting)**特性导致的。
JS引擎在执行代码前,会先扫描当前作用域,把所有用function关键字声明的函数整个“拎”到作用域顶部。也就是说,你第一段代码的执行顺序,在JS眼里其实和第二段完全一致——函数定义被提前了,调用自然不会出错。
举个直观的例子,你写的:
doSomething(); function doSomething(){ console.log("Hello World"); }
JS引擎实际处理后会变成:
function doSomething(){ console.log("Hello World"); } doSomething();
不过要注意,只有函数声明(function 函数名(){...}这种写法)才有这个提升效果。如果是函数表达式,比如:
doSomething(); // 这里会直接报错 const doSomething = function(){ console.log("Hello World"); }
这种情况变量doSomething的声明会被提升,但赋值的函数体不会,调用时它还是undefined,自然会报错。
至于有人喜欢把调用写在定义前面,大多是个人编码习惯——比如想让读者先看到代码的核心执行逻辑,再去看具体实现细节。只要是函数声明,两种写法的执行结果没区别。
内容的提问来源于stack exchange,提问作者New Developer
相关产品推荐
相关产品推荐

