函数声明提升的问题

yepnope
  • 243

下面的代码可以正常运行,因为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之后的改动,让在块作用域里面的函数声明变成只会提升定义吗?

回复
阅读 535
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说明声明已经提升

你知道吗?

宣传栏