javascript作用域问题实例分析


Posted in Javascript onJuly 13, 2015

最近做项目过程中需要根据JSON数据生成一个树状的目录,结果代码如下:

var folderList=[
  {
    "FolderName": "ASD",
    "ChildList": null
  },
  {
    "FolderName": "内网公告",
    "ChildList": null
  },
  {
    "FolderName": "测试文档",
    "ChildList": null
  },
  {
    "FolderName": "软件开发",
    "ChildList": null
  },
  {
    "FolderName": "Test",
    "ChildList": [
      {
        "FolderName": "Test2",
        "ChildList": [
          {
            "FolderName": "Test3",
            "ChildList": null
          }
        ]
      }
    ]
  },
  {
    "FolderName": "个人",
    "ChildList": null
  },
  {
    "FolderName": "公司通知",
    "ChildList": null
  },
  {
    "FolderName": "采购平台",
    "ChildList": null
  }
];
      var str='';
      function generateFolders(arr) {
        if (arr.length > 0) {
          str += '<div class="sui-list sui-list-icon ubt bc-gra1">';
          for (var i = 0, len = arr.length; i < len; i++) {
            str += '<ul class="ub ub-ac">' 
                + '<li class="sui-list-licon sui-icon-ok-circle fts2">' + '</li>' 
                + '<ul class="ub ub-f1 sui-list-item">' 
                 + '<li class="ub-f1 sui-list-text sui-list-nowrap">' + arr[i].FolderName + '</li>' 
                 + '<li class="sui-list-ricon ub-img sui-icon-chevron-right fts2"></li>' 
                + '</ul>' 
               + '</ul>';
            if (isDefine(arr[i].ChildList)) {
              str += generateFolders(arr[i].ChildList);
            }
          }
          str += '</div>';
          return str;
        }else{
          return '';
        }
      }

      var folderTxt ='<div class="sui-list sui-list-icon ubt bc-gra1">' 
                 +'<ul class="ub ub-ac">' 
                   +'<li class="sui-list-licon sui-icon-drawer fts2">' + '</li>' 
                   +'<ul class="ub ub-f1 sui-list-item">' 
                     +'<li class="ub-f1 sui-list-text sui-list-nowrap">我的目录</li>' 
                     +'<li class="sui-list-ricon ub-img sui-icon-chevron-right fts2"></li>' 
                   +'</ul>' 
                 +'</ul>';
      folderTxt+=generateFolders(folderList);
      folderTxt += '</div>';
      $('#list').html(folderTxt);
      /**
       * 判断是否是空
       * @param value
       */
      function isDefine(value){
        if(value == null || value == "" || value == "undefined" || value == undefined || value == "null" || value == "(null)" || value == 'NULL' || typeof(value) == 'undefined'){
          return false;
        }
        else{
       value = value+"";
          value = value.replace(/\s/g,"");
          if(value == ""){
            return false;
          }
          return true;
        }
      }

结果出来的树如下图:

javascript作用域问题实例分析

经排查,发现是由于str定义的位置不对引起的,将str定义为局部变量就可以了。

function generateFolders(arr) {
        var str='';
        if (arr.length > 0) {
          str += '<div class="sui-list sui-list-icon ubt bc-gra1">';
          for (var i = 0, len = arr.length; i < len; i++) {
            str += '<ul class="ub ub-ac">' 
                + '<li class="sui-list-licon sui-icon-ok-circle fts2"></li>' 
                + '<ul class="ub ub-f1 sui-list-item">' 
                  + '<li class="ub-f1 sui-list-text sui-list-nowrap">' + arr[i].FolderName + '</li>' 
                  + '<li class="sui-list-ricon ub-img sui-icon-chevron-right fts2"></li>' 
                + '</ul>' 
              + '</ul>';
            if (isDefine(arr[i].ChildList)) {
              str += generateFolders(arr[i].ChildList);
            }
          }
          str += '</div>';
          return str;
        }else{
          return '';
        }
      }

修改之后,可实现想的效果:

javascript作用域问题实例分析

以上所述就是本文的全部内容了,希望大家能够喜欢。

Javascript 相关文章推荐
JavaScript 版本自动生成文章摘要
Jul 23 Javascript
用jQuery打造TabPanel效果代码
May 22 Javascript
javascript学习笔记(十二) RegExp类型介绍
Jun 20 Javascript
JavaScript实现获得所有兄弟节点的方法
Jul 23 Javascript
js+html5实现的自由落体运动效果代码
Jan 28 Javascript
jQuery事件绑定on()与弹窗实现代码
Apr 28 Javascript
JavaScript 字符串数字左补位,右补位,取固定长度,截位扩展函数代码
Mar 25 Javascript
详解升级react-router 4 踩坑指南
Aug 14 Javascript
在Vuex使用dispatch和commit来调用mutations的区别详解
Sep 18 Javascript
vue实现todolist基本功能以及数据存储功能实例详解
Apr 11 Javascript
详解Vue项目中实现锚点定位
Apr 24 Javascript
javascript实现时钟动画
Dec 03 Javascript
javascript中使用正则表达式清理table样式的代码
Apr 01 #Javascript
jquery实现图片上传之前预览的方法
Jul 11 #Javascript
JavaScript使用RegExp进行正则匹配的方法
Jul 11 #Javascript
javascript中JSON对象与JSON字符串相互转换实例
Jul 11 #Javascript
javascript实现下班倒计时效果的方法(可桌面通知)
Jul 10 #Javascript
JavaScript清空数组元素的两种方法简单比较
Jul 10 #Javascript
JavaScript实现的类字典插入或更新方法实例
Jul 10 #Javascript
You might like
PHP 简单日历实现代码
2009/10/28 PHP
PHP中使用数组实现堆栈数据结构的代码
2012/02/05 PHP
PHP用continue跳过本次循环中剩余代码的注意点
2017/06/27 PHP
PHP实现cookie跨域session共享的方法分析
2019/08/23 PHP
Laravel 创建可以传递参数 Console服务的例子
2019/10/14 PHP
基于pthread_create,readlink,getpid等函数的学习与总结
2013/07/17 Javascript
jquery uploadify 在FF下无效的解决办法
2014/09/26 Javascript
input输入框鼠标焦点提示信息
2015/03/17 Javascript
JavaScript取得键盘按下方向键是哪个的方法
2015/08/04 Javascript
JS实现的3D拖拽翻页效果代码
2015/10/31 Javascript
javascript原生ajax写法分享
2016/04/10 Javascript
jQuery实现Select下拉列表进行状态选择功能
2017/03/30 jQuery
Angular 1.x个人使用的经验小结
2017/07/19 Javascript
Weex开发之WEEX-EROS开发踩坑(小结)
2019/10/16 Javascript
使用PreloadJS加载图片资源的基础方法详解
2020/02/03 Javascript
VSCode launch.json配置详细教程
2020/06/18 Javascript
[03:48]DOTA2完美大师赛主赛事第二日精彩集锦
2017/11/24 DOTA
Python translator使用实例
2008/09/06 Python
Python字符串和字典相关操作的实例详解
2017/09/23 Python
Python 装饰器实现DRY(不重复代码)原则
2018/03/05 Python
python使用pdfminer解析pdf文件的方法示例
2018/12/20 Python
python学习开发mock接口
2019/04/28 Python
python导入坐标点的具体操作
2019/05/10 Python
django多个APP的urls设置方法(views重复问题解决)
2019/07/19 Python
django的403/404/500错误自定义页面的配置方式
2020/05/21 Python
python 将html转换为pdf的几种方法
2020/12/29 Python
教育专业自荐书范文
2013/12/17 职场文书
毕业设计计划书
2014/01/09 职场文书
学校门卫管理制度
2014/01/30 职场文书
学校就业推荐信范文
2014/05/19 职场文书
司法助理专业自荐书
2014/06/13 职场文书
幸福家庭标语
2014/06/27 职场文书
工作说明书格式
2014/07/29 职场文书
2015年招聘工作总结
2014/12/12 职场文书
搞笑老公保证书
2015/02/26 职场文书
竞聘书的秘诀
2019/04/02 职场文书