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);
                });
            }

    }  

  • 相关阅读:
    Struts+JQuery EasyUI实现查询
    echarts+jquery+ajax+struts2实现数据库数据加载
    对mysql出现1006错误问题的解决办法
    被未知进程占用端口的解决办法
    关于servlet的初步理解(一)
    关于windows防火墙关不掉解决办法
    阿里云ubuntu配置---------apache_tomcat配置
    阿里云ubuntu配置------jdk安装和配置
    echarts标题属性设置
    jsp+servlet关键技术总结(未完结...持续更新中)
  • 原文地址:https://www.cnblogs.com/argb/p/2607559.html
Copyright © 2011-2022 走看看