美文网首页程序员
javascript声明语句以及IIFE问题

javascript声明语句以及IIFE问题

作者: 小鳄鱼的大哥哦 | 来源:发表于2021-01-15 18:37 被阅读0次

    JavaScript 遵循了一般编程语言的“语句 - 表达式”结构,多数编程语言都是这样设计的。

    image.png image.png

    这里记录一下自己以前不太熟悉的知识点。

    var语句

    • 预编译阶段变量提升
    console.log(a); // undefiend
    var a = 1;
    
    • 穿透for,switch,if等
    if(true) {
      var a = 1;
    }
    console.log(a); // 1
    

    let和const语句

    • 仅作用于当前作用域,不可再次声明。
    • const声明的变量无法修改。
    • 无变量提升问题。
    • 不会穿透for,switch,if等

    函数声明

    • 预编译阶段提升
    console.log(foo); // function
    function foo() {};
    
    • 在if中不会提升
    console.log(foo); // undefined
    if(true) {
      function foo() {};
    }
    

    IIFE-立即执行的函数表达式

    • 用来产生作用域,例如:
    for (var i = 0; i < 10; i++) {
      setTimeout(() => {
        console.log(i); // 得到10个10
      })
    }
    
    // 使用IIFE来得到0-9
    for(var i = 0; i < 10; i++){
      (function(a){
        setTimeout(function(){
          console.log(a); // 得到0-9
        }, 0)
      })(i);
    };
    
    • 产生只读的函数名特性
    var a = 1;
    (function a() {
      console.log(a); // function
      a = 2; // 在当前作用域中a作为函数名只读,无法修改
      console.log(a); // function
    })();
    console.log(a); // 1;
    

    相关文章

      网友评论

        本文标题:javascript声明语句以及IIFE问题

        本文链接:https://www.haomeiwen.com/subject/mcbwaktx.html