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>
  • 相关阅读:
    2.1.7出现异常,锁自动释放
    2.1.5脏读
    2.1.4synchronized方法与锁对象
    2.1.3多个对象多个锁
    2.1.2实例变量非线程安全
    2.1.1方法内的变量为线程安全
    Linux内核开发
    fl2440 platform总线led字符设备驱动
    fl2440字符设备led驱动
    cdev结构体及其相关函数
  • 原文地址:https://www.cnblogs.com/xu3241/p/13269094.html
Copyright © 2011-2022 走看看