js预解析-变量/函数声明提升

规则一: 使用var、function等关键字进行声明的变量/函数,会被提升到当前作用域的最前面

  • 只提升声明,不提升赋值

  • 提升到当前作用域的最前面

规则二:未使用关键字进行声明的变量,会被提升为全局变量(windows.xx)

案例:

点击查看代码
f1();
console.log(c);
console.log(b);
console.log(a);

function f1() {
    var a = b = c = 9;
    console.log(a);
    console.log(b);
    console.log(c);
}

解析:

点击查看代码
//1.函数声明在全局作用域内提升
function f1() {
    // 2.变量声明在局部作用域内提升
    var a;
    // 3.赋值操作从右往左拆解
    c = 9; // 没有用var进行声明,提升为 windows.c = 9
    b = c; // 同上,windows.b = 9
    a = b; // 局部变量 a = 9
    console.log(a); // -> 局部a,9
    console.log(b); // -> 全局b,9
    console.log(c); // -> 全局c,9
}
f1();
console.log(c); // -> 全局c,9
console.log(b); // -> 全局b,9
console.log(a); // -> 未声明未定义,报错
// 最终输出:9 9 9 9 9 error

小结:

1. 函数提升

  • 作用域内,命名函数何时调用都可以

使用function关键字声明的函数,格式:function fn()

  • 作用域内,匿名函数在声明前调用会报错

使用函数表达式声明函数,格式:var fn = function()

2. 变量提升

  • 声明同时赋值 -> 正常值

  • 仅声明未赋值 -> undefined

  • 未声明仅赋值 -> 正常值,提升为全局变量

  • 未声明未赋值 -> error

不同情况下调用某个变量的输出结果

posted @   JO-BAE  阅读(23)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示