javascript - js 函数和变量的hoisting,第二段里面的函数为啥fly没有提升?

查看:65
本文介绍了javascript - js 函数和变量的hoisting,第二段里面的函数为啥fly没有提升?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

函数声明方式提升【成功】

function test(){
    foo();
    function foo(){
        console.info("I am foo!")
    }
}
test();

函数表达式方式提升【失败】

function test(){
    foo();//Uncaught TypeError: foo1 is not a function(…)
    fly();//VM83:1 Uncaught ReferenceError: fly is not defined(…)
   var foo =function fly(){
        console.info("I am foo!")
    }
}
test();

第二段里面的函数为啥fly没有提升,不也是声明式的吗?为啥一个是TypeError,fly是ReferenceError?

解决方案

函数声明会提升,但是函数表达式不会。变量声明会提升,所以你执行foo()的时候fooundefined不是函数所以会告诉你TypeError

var foo =function fly(){
    console.info("I am foo!")
}

这种写法叫命名函数表达式,fly仅仅在函数体内可以访问。所以在外面使用告诉你ReferenceError

这篇关于javascript - js 函数和变量的hoisting,第二段里面的函数为啥fly没有提升?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆