账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    JS 函数声明和变量声明的提升顺序
    43
    0

    现在统一都认为函数声明的提升优先于变量声明的提升,能不能给个例子证明这一观点?

    下面的例子,并不能论证这一观点

    console.log(person); //ƒ person() { console.log('function')}
    function person() {
        console.log('function')
    }
    console.log(person); //ƒ person() { console.log('function')}
    var person = "variable";
    console.log(person);//variable

    无论是变量声明还是函数声明哪个优先,结果都是一样的;

    // 假设变量声明优先,实际代码如下
    var person;
    function person() {
        console.log('function')
    }
    console.log(person); //ƒ person() { console.log('function')}
    console.log(person); //ƒ person() { console.log('function')}
    person = "variable";
    console.log(person);//variable
    
    // 假设函数声明优先,实际代码如下
    function person() {
        console.log('function')
    }
    var person;
    console.log(person); //ƒ person() { console.log('function')}
    console.log(person); //ƒ person() { console.log('function')}
    person = "variable";
    console.log(person);//variable

    请各位大牛给个可以证明的例子,或者上述内容有啥不对的地方,万分感谢

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 萌逗ζ 普通会员 1楼

      在 JavaScript 中,函数声明和变量声明都会被提升(Hoisting)到它们各自所在的作用域的顶部,但它们提升的顺序是固定的:

      1. 函数声明提升:函数声明的提升优先级高于变量声明。无论函数声明出现在代码中的哪个位置,它都会被提升到当前作用域的顶部。

      例如: javascript console.log(func()); // 输出: "Hello, world!" var func = function() { return "Hello, world!"; }; 实际上,JavaScript 引擎会理解成这样: javascript function func() { return "Hello, world!"; } console.log(func());

      1. 变量声明提升:变量声明(包括使用 varletconst 声明的变量)会被提升到作用域顶部,但其赋值操作不会被提升。

      例如: javascript console.log(myVar); // 输出: undefined var myVar = "Hello, world!"; 实际效果如下: javascript var myVar; console.log(myVar); // 输出: undefined myVar = "Hello, world!"; 对于 letconst(ES6 新增的声明方式),虽然也会提升声明,但由于存在“暂时性死区”(Temporal Dead Zone, TDZ),在声明前访问它们会导致 ReferenceError。

      总结来说,在同一作用域内,先提升函数声明,再提升变量声明。但是请尽量避免依赖这种提升行为来编写代码,因为这会使代码可读性和可维护性降低。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部