• 前端面试题整理——作用域和闭包


    什么是闭包,闭包的表现形式:

        // 作用域应用的特殊情况,有两种表现:
        // 函数作为参数被传递
        // 函数作为返回值被返回
    
        // 函数作为返回值
        function create() {
            let a = 100
            return function () {
                console.log(a)
            }
        }
        let fn = create();
        let a = 200;
        fn()
    
        //函数作为参数
        function print(fn) {
            let b = 200;
            fn()
        }
        let b = 100;
        function fnb() {
            console.log(b)
        }
        print(fnb)
    
        // 闭包:自由变量的查找,是在函数定义的地方向上级作用域查找,不是在执行的地方。

    this的使用场景:

    • 作为普通函数调用
    • 使用call、apply、bind 调用
    • 作为对象方法被调用
    • 在class方法中调用
    • 箭头函数
    重点,无论什么场景调用,this的值都是在函数“执行时”被定义,而不是“定义”函数时定义。
    箭头函数的this是取函数上级作用域的this

    实际开发中闭包的应用:

    隐藏数据,如做一个简单的cache工具,闭包隐藏数据,只提供API。
        function createCache() {
            const data = {} // 闭包中的数据被隐藏,不被外界访问
            return {
                set: function (key, val) {
                    return data[key] = val
                },
                get: function (key) {
                    return data[key]
                }
            }
        }
        const c = new createCache()
        c.set('name','aaa')
        console.log(c.get('name'))

    写出下列代码的输出:

        var x = 2;
        var y = {
            x: 3,
            z: (function (x) {
                this.x *= x;
                x += 2;
                return function (n) {
                    this.x *= n;
                    x += 3;
                    console.log(x)
                }
            })(x)
        }
        var m = y.z
        m(4);
        y.z(5);
        console.log(x, y.x);
    放弃安逸,持续努力——成长
  • 相关阅读:
    菜鸟系列k8s——快速部署k8s集群(3)
    菜鸟系列docker——docker容器(7)
    菜鸟系列Fabric源码学习 — 区块同步
    菜鸟系列Fabric源码学习 — peer节点启动
    菜鸟系列Fabric源码学习 — orderer服务启动
    递归科赫雪花
    汉诺塔递归函数hanoi
    字符串格式化与.format()
    turtle风轮绘制
    接口签名2
  • 原文地址:https://www.cnblogs.com/MarsPGY/p/13461877.html
Copyright © 2020-2023  润新知