js中的作用域和闭包

js中的作用域

作用域是变量和函数能起作用的范围,在 ES6之前只有全局作用域和局部作用域
全局作用域:变量和函数在整个script内都能调用

		var a = 10;
        function fn(){
            console.log(a);
        }
        fn();//10

局部作用域:作用于函数内部,函数外部不能调用

		function fn(){
            var a = 10;
            console.log(a);
        }
        fn();//10
        console.log(a);//a is not defined

特殊情况:如果变量前面没有 var 关键字,这个变量就成了全局属性

        function fn(){
            a = 10;
            console.log(a);
        }
        fn();//10
        console.log(a);//10

补充:作用域链:就近原则,变量从内到外查找的方法,此作用域没有就到上一级作用域查找

        var a = 1;
        function fn(){
            var a = 2;
            function inner(){
                //var a = 3;
                console.log(a);//2
            }
            inner();
        }
        fn();

js中的闭包

闭包(closure)指有权访问另一个函数作用域中的变量的函数。–JavaScript高级程序设计

简单理解就是:一个作用域可以访问另一个函数内部的局部变量

		function fn(){
            var num = 10;
            function fun(){
                console.log(num);
            }
            fun();
        }
        fn();

此时就会产生一个闭包函数
js闭包

闭包的作用

1.延申了变量的作用范围
这里通过返回一个函数的方法在全局作用域中访问到了函数内部的变量

		function fn(){
            var num = 10;
            return function(){
                console.log(num);
            }
        }
        fn()();//10
        var f = fn();
        f();//10

2.实现封装,管理私有变量和私有方法,将变量的变化封装在安全的环境中

        function f1() {
            var num = 12;//默认值

            function getNum() {
                return num;
            }
            function setNum(value) {
                if (value > 0 && value < 100) { //设置条件,保护私有变量
                    num = value;
                }
            }
            return {
                getNum: getNum,
                setNum: setNum
            }
        }

        var res = f1();
        res.setNum(120);
        console.log(res.getNum());//12

3.闭包的缺点:闭包中的变量会始终保持在内存中,直到程序结束,内存消耗会很大

闭包的经典案例

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值