zoukankan      html  css  js  c++  java
  • javascript小陷阱

    //有点意思

    case 1:
    function
    a(x) {

    console.log(x);
    function b() {
    var x= x || 8;
    console.log(x);
    }
    b()

    } 

     a(3);//猜猜?

    case 2: 

    function a(x) {
    console.log(x);
    function b() {
    var x;
    x= x || 8;
    console.log(x);
    }
    b()
    }

    a(3); //猜猜?

    结果是一样的,都是3,8;为什么不是3,3呢?原因也很简单,函数b中的var x在作怪,使得在b中x的值首先变成了undefined,

    var x=x||8;与var x;x=x||8 是等价的,前面那种形式实际上会先被js引擎转换成后者, 

    自然x=undefined||8会得到x=8。

    之所以提到这个小问题,是因为在一个项目中不小心写了这样的代码: 

    var cache={
    readServer:function (callback) {
                var paramsObj = {
                    lemmaId:commonSubmitData.lemmaId,
                    versionId:commonSubmitData.versionId,
                    subLemmaId:dynamicData.activeSubLemmaId,
                    subVersionId:dynamicData.activeSubVersionId,
                    type:1
                };
                var paramsStr = baidu.url.jsonToQuery(paramsObj),
                    self = this;

                initData.communicating = true;
                ajax.post(initData.doubtShowUrl, paramsStr, function (xhr, msg) {
                    initData.firstClick = false;
                    initData.communicating = false;
                    if (!self.doubtDataCache[dynamicData.activeSubLemmaId]) {
                        self.doubtDataCache[dynamicData.activeSubLemmaId] = json.parse(msg);
                    }

    //下面两行是错误的
    var callback=callback||function(){};
    callback.call(self, self.doubtDataCache[dynamicData.activeSubLemmaId]);
    /***这里是正确的
                    if(lang.isFunction(callback)){
                        callback.call(self, self.doubtDataCache[dynamicData.activeSubLemmaId]);
                    }
    */
                    //console.log(callback);
                });
            }

    }  

  • 相关阅读:
    SpringCloud Zipkin快速开始
    Spring-Cloud-Gateway Predicate谓词(断言)使用与自定义
    Gateway Redis令牌桶请求限流过滤器
    SpringBoot集成logback日志组件
    Java使用Aspose-Words实现Word转换Pdf
    JAVA通过Map拼接SQL语句(Insert Update语句)
    使用Java反射机制将Bean对象转换成Map(驼峰命名方式 — 下划线命名方式)
    mybatis执行原生sql
    windows环境下elasticsearch安装教程(超详细)
    购物车的原理及Java实现(仿京东实现原理)
  • 原文地址:https://www.cnblogs.com/argb/p/2607559.html
Copyright © 2011-2022 走看看