函数声明提升的问题

下面的代码可以正常运行,因为test的声明被提升了。

test();
function test () {}

而下面的写法,test变成了undefined。test好像从函数声明变成函数表达式了,并且只提升了定义部分, 如下:

test(); // Uncaught TypeError: test is not a function
if(false){
  function test () {}
}

类似于下面的写法:

test(); // Uncaught TypeError: test is not a function
if(false){
  var test = function () {}
}

是因为es6之后的改动,让在块作用域里面的函数声明变成只会提升定义吗?

阅读 1.8k
2 个回答

条件语句为false,都没执行到条件里面,你在条件外面当然访问不到函数啊,只有满足了条件,才能去执行函数的定义已经初始化。

楼上说错了吧,声明提升与有没有执行无关,
使用var声明的变量会被自动添加到最接近的上下文,在函数中,最近进的上下文是函数上下文,没有使用关键字定义则全局上下文

而且呢验证变量是否提升实在声明变量前打印变量,输出undefined即是声明提升

        console.log(test)//undefined说明声明已经提升,
test(); // Uncaught TypeError: test is not a function
if(false){
  function test () {}
}

这里console.log(test)//undefined 说明声明已经提升,

console.log(test)//undefined说明声明已经提升,
test(); // Uncaught TypeError: test is not a function
if(false){
  var test = function () {}
}

console.log(test)//undefined说明声明已经提升

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