JavaScript Closures 闭包

在一些编程语言中, 当我们执行完成function中的局部代码仅在函数执行期间可运行. 但是JS 事不一样的

 

闭包总结来说, 就是innerFunction 总是有使用outer function 的 variables 和 paramaters, 即使在outer function returned 之后.

 

 

这句话可能解释起来比较困难. 但是我们通过下面案例来理解闭包

 

<script>
        function retirement(retirementAge) {
            var a = ' years left until retirement.';
            return function(yearOfBirth) {
                var age = 2018 - yearOfBirth;
                console.log((retirementAge - age) + a);
            }
        }

        var retirementUS = retirement(66);
        retirementUS(1990); // 38 years left until retirement.
    </script>

 

<script>
        function interviewQuestion(job) {
            return function (name) {
                if (job === 'designer') {
                    console.log(name + ', can you pls explain what UX design is?');
                } else if (job === 'teacher') {
                    console.log('What subject do you teach, ' + name + '?');
                } else {
                    console.log('Hello ' + name + ', what do you do?');
                }
            }
        }

         interviewQuestion('teacher')('二狗子'); // What subject do you teach, 二狗子?
    </script>

 

 

 

但是,

如果不是某些特定任务需要使用闭包,在其它函数中创建函数是不明智的,因为闭包在处理速度和内存消耗方面对脚本性能具有负面影响。

 

实用的闭包

 

 

转载于:https://www.cnblogs.com/TheMiao/p/9777821.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值