• JavaScript 闭包


    不严格的说闭包就是函数,直接上例子

    let f;
    {
        let o = { note:"Safe"};
        f = function(){
            return o;
        }
    }
    let oRef = f();
    oRef.note = "UnSafe Any More"

    在块的外部依然可以访问到内部变量o,那么这个块(包括父作用域)构成了一个闭包,不管在任何地方调用oRef,他都有权限访问块中的变量o。

    即时调用函数表达式:IIFE,使用函数内部数据,确保安全性,可返回任意类型(数组,对象,函数)

    const massage = (function(){
        const secret = "Im a secret";
        return `the secret is ${secret.length} characters long.`
    })();
    console.log(massage);

    secret因为在函数中,函数外是无法访问的.

    提升机制:

    1 变量的提升

    x;
    let x = 4;//会报错
    
    x;//undefined
    var x = 4;
    x;//4

    在以上的例子中可以看到使用var定义的话会把该变量的声明提升至该作用域的顶部。(不是提升赋值)

    var可重复赋值,let和const不可以。let可完全取代var

    2 函数的提升:

    f();
    function f(){
        console.log('f');
    }

    在第一行f()也会执行打印‘f’。

    f();
    let f =function(){
        console.log('f');
    }

    此时在第一行f()就会报错。在let之前就是该变量的“临时死区”(TDZ)

  • 相关阅读:
    java 基本数据类型的取值范围
    警惕自增的陷阱
    三元操作符的类型务必一致
    不要随便设置随机种子
    优先使用整形池
    IN、ANY、ALL与SOME
    第六章-序列:字符串、列表和元组 笔记
    第十二章-安全性
    第五章-数字 课后答案
    第十一章-约束、视图与事务
  • 原文地址:https://www.cnblogs.com/BigJ/p/7911523.html
Copyright © 2020-2023  润新知