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 相关文章推荐
仅img元素创建后不添加到文档中会执行onload事件的解决方法
Jul 31 Javascript
JS操作select下拉框动态变动(创建/删除/获取)
Jun 02 Javascript
javascript实现动态标签云
Oct 16 Javascript
浅析js中substring和substr的方法
Nov 09 Javascript
JS实现关闭当前页而不弹出提示框的方法
Jun 22 Javascript
基于vue.js实现图片轮播效果
Dec 01 Javascript
canvas绘制环形进度条
Feb 23 Javascript
详解VUE-地区选择器(V-Distpicker)组件使用心得
May 07 Javascript
解决js相同的正则多次调用test()返回的值却不同的问题
Oct 10 Javascript
微信小程序实现一个简单swiper代码实例
Dec 30 Javascript
js 动态校验开始结束时间的实现代码
May 25 Javascript
原生JS利用transform实现banner的无限滚动示例代码
Jun 15 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
Apache2 httpd.conf 中文版
2006/11/17 PHP
Gregarius中文日期格式问题解决办法
2008/04/22 PHP
PHP命名空间(Namespace)的使用详解
2013/05/04 PHP
php创建多级目录的方法
2015/03/24 PHP
Laravel中的Blade模板引擎示例详解
2017/10/10 PHP
让Laravel API永远返回JSON格式响应的方法示例
2018/09/05 PHP
laravel开发环境homestead搭建过程详解
2020/07/03 PHP
实例:用 JavaScript 来操作字符串(一些字符串函数)
2007/02/15 Javascript
Javascript 自定义类型方法小结
2010/03/02 Javascript
深入了解javascript中的prototype与继承
2013/04/14 Javascript
jquery中animate动画积累的解决方法
2013/10/05 Javascript
js解决select下拉选不中问题
2014/10/14 Javascript
bootstrap fileinput完整实例分享
2016/11/08 Javascript
JS日程管理插件FullCalendar简单实例
2017/02/07 Javascript
360doc网站不登录就无法复制内容的解决方法
2018/01/27 Javascript
vue-cli项目根据线上环境分别打出测试包和生产包
2018/05/23 Javascript
Angularjs实现页面模板清除的方法
2018/07/20 Javascript
浅谈Vue3 Composition API如何替换Vue Mixins
2020/04/29 Javascript
js将日期格式转换为YYYY-MM-DD HH:MM:SS
2020/09/18 Javascript
[04:00]黄浦江畔,再会英雄——完美世界DOTA2 TI9应援视频
2019/07/31 DOTA
在Django的模型中执行原始SQL查询的方法
2015/07/21 Python
Python3远程监控程序的实现方法
2019/07/15 Python
关于阿里云oss获取sts凭证 app直传 python的实例
2019/08/20 Python
Python网络爬虫四大选择器用法原理总结
2020/06/01 Python
html5 canvas-1.canvas介绍(hello canvas)
2013/01/07 HTML / CSS
采购人员的个人自我评价
2014/01/16 职场文书
基层党组织建设整改方案
2014/09/16 职场文书
小学生九一八纪念日83周年演讲稿500字
2014/09/17 职场文书
乡镇遵守党的政治纪律情况对照检查材料
2014/09/26 职场文书
建筑专业毕业生求职信
2014/09/30 职场文书
测量员岗位职责
2015/02/14 职场文书
驳回起诉裁定书
2015/05/19 职场文书
初中班长竞选稿
2015/11/20 职场文书
Java字符串逆序方法详情
2022/03/21 Java/Android
python神经网络学习 使用Keras进行简单分类
2022/05/04 Python
SQL Server 中的事务介绍
2022/05/20 SQL Server