JavaScript 里关于函数变量提升的问题?

在 js 里函数声明由于提升的原因,可以提前调用

test()// 我可以提前调用

function test(){
console.log('1')
}

故而引发了下面的思考

function doSometing(){
otherSometing() // 这里为什么可以被正确调用?
}

function otherSometing(){
console.log('11')
}

doSometing() // '11'


当我声明两个函数的时候,函数声明提升肯定也有一个先后顺序吧?
我目前认为 otherSometing 肯定无法被声明到 doSometing 之前的。

问题:为什么上述代码 doSometiong 可以正确被调用不报错呢?

---3.15/ 20:41

sorry ,由于我的过度思考,提出了一个有问题的问题...抱歉

阅读 1.6k
2 个回答

声明位置并没有立即调用

试试这样?

(function doSometing(){
otherSometion() 
})()

function otherSometing(){
console.log('11')
}

//doSometion() // '11'
新手上路,请多包涵

在 js 的编译阶段,函数声明会被提升到作用域的顶部,因此在代码执行时,函数已经存在于内存中,可以被任何地方调用。但是,函数表达式却不会被提升,只有在表达式被执行时才会被定义。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Microsoft
子站问答
访问
宣传栏