美文网首页
JS 冷知识集合

JS 冷知识集合

作者: Oldboyyyy | 来源:发表于2019-04-12 16:48 被阅读0次

    第1题

    var b = 10;
    (function b(){
        b = 20;
        console.log(b);  // function b() {b=20;console.log(b)}
    })();
    
    大佬标准答案
    知乎
    MDN
    分析性大佬的答案
    // 声名式 创建一个函数
    function a(){
      a = 1;
      console.log(a); // 1
    }
    a()
    // 函数表达式创建函数 (被赋值的是一个具名函数)
    var b = function a() {
      a = 1;
      console.log(a); // function a(){ a = 1; console.log(a)}
    }
    b();
    console.log(a); // undefined
    // 严格模式再来一次
    var b = function a() {
      "use strict"
      a = 1; // 报错 Uncaught TypeError: Assignment to constant variable 
               // 从报错信心可以看出 a 是一个被 常量储存的值 
      console.log(a);
    b(); 
    

    总结: 通过函数表达式的形式创建函数, 表达式后面是一个具名函数的时候, 他的函数名只能在函数体里面访问的到, 并且这个函数名是被常量储存(类ES6const)的(在非严格模式下,给常量储存的值赋值, 会直接被忽略的, 严格模式下报错).
    IIFE 函数只执行一次, 并且他也是函数表达式的形式创建, 也符合上面所说的结论.

    拓展: IIFE 可以有多种变体

    (function(){...})(); // 正常形式
    (function(){...}())  
    !function(){...}()
    ~function(){...}()
    -function(){...}()
    +function(){...}()
    

    相关文章

      网友评论

          本文标题:JS 冷知识集合

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