zoukankan      html  css  js  c++  java
  • 前端面试题整理——作用域和闭包

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

        // 作用域应用的特殊情况,有两种表现:
        // 函数作为参数被传递
        // 函数作为返回值被返回
    
        // 函数作为返回值
        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);
    放弃安逸,持续努力——成长
  • 相关阅读:
    微擎 关注发送推荐消息
    修改 processor.php 文件,监听用户对该应用的消息
    微擎返回图文信息
    微擎客服消息发送的函数
    mui 底部导航栏的实现
    两张表的关联查询
    微擎 截取字符串
    webStorm中NodeJs 没有智能提示
    OpenCV 实现自己的线性滤波器
    OpenCV 基本的阈值操作
  • 原文地址:https://www.cnblogs.com/MarsPGY/p/13461877.html
Copyright © 2011-2022 走看看