zoukankan      html  css  js  c++  java
  • 关于闭包的几个思考题,值得回味!

    <script>
            // 闭包 计算打车价格
            //打车起步价13(3公里内),之后每多一公里增加5块钱,用户输入公里数就可以计算打车价格
            //如果有拥堵情况,总价格多收取10块钱的拥堵费
            var car = (function(){
                var start = 13; //起步价
                var total = 0; //总价
                return{
                    price:function(n){
                        if(n <= 3){
                            total = start;
                        }else{
                            total = start + (n-3) *5
                        }
                        return total;
                    }, //正常价格
                    traffic:function(flag){
                       return flag ? total + 10 : total;
                    } //拥堵价格
                }
            })();
            console.log(car.traffic(false));
            
            console.log(car.price(5)); //23
            console.log(car.traffic(true)); //33
            
            console.log(car.price(1)); //13
            console.log(car.traffic(false)); //13
            
            
    二: 两个思考题 和解析
            var name = 'The window';
            var obj = {
                name : 'myobject',
                getNameFun:function(){
                    return function(){
                        return this.name;
                    }
                }
            }
            console.log(obj.getNameFun()()); //The window
            //  等价于 
            // var f = obj.getNameFun()
            // var f = function(){
            //     return this.name
            // }
            // f() = function(){return this.name}()  //解析为了立即执行函数,this指向window  所以返回了 The window   无闭包
            var name = 'The window';
            var obj = {
                name : 'myobject',
                getNameFun:function(){
                    var that = this;
                    return function(){
                        return that.name;
                    }
                }
            }
            console.log(obj.getNameFun()()); //打印myobject  有闭包
            //分析: var f = obj.getNameFun()
            // var that = this;
            //var f = function(){
             //   return that.name;
            //}
        </script>
  • 相关阅读:
    Springboot学习七 spring的一些注解
    Spring boot 学习六 spring 继承 mybatis (基于注解)
    Spring boot 学习 五:domain的定义
    Spring boot 学习 四:spring boot 配置文件 application.yml
    python学习(十九) 查看Python的安装路径
    docker 学习(九) docker部署静态网站
    maven学习9 关于maven一些參數
    docker 学习(八) docker file
    HTTP VS HTTPS
    【Python】【亲测好用】安装第三方包报错:AttributeError:'module' object has no attribute 'main'
  • 原文地址:https://www.cnblogs.com/xu3241/p/13269094.html
Copyright © 2011-2022 走看看