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 相关文章推荐
js Map List 遍历使用示例
Jul 10 Javascript
js实现汉字排序的方法
Jul 23 Javascript
纯js代码制作的网页时钟特效【附实例】
Mar 30 Javascript
JS函数arguments数组获得实际传参数个数的实现方法
May 28 Javascript
针对后台列表table拖拽比较实用的jquery拖动排序
Oct 10 Javascript
微信小程序链接传参并跳转新页面
Nov 29 Javascript
Angular.js跨controller实现参数传递的两种方法
Feb 20 Javascript
ionic实现底部分享功能
May 11 Javascript
详解利用Angular实现多团队模块化SPA开发框架
Nov 27 Javascript
详解解决Vue相同路由参数不同不会刷新的问题
Oct 12 Javascript
用VueJS写一个Chrome浏览器插件的实现方法
Feb 27 Javascript
JS判断浏览器类型与操作系统的方法分析
Apr 30 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日历[测试通过]
2008/03/27 PHP
PHP form 表单传参明细研究
2009/07/17 PHP
smarty缓存用法分析
2014/12/16 PHP
php删除文本文件中重复行的方法
2015/04/28 PHP
使用PHPWord生成word文档的方法详解
2019/06/06 PHP
服务端 VBScript 与 JScript 几个相同特性的写法 By shawl.qiu
2007/03/06 Javascript
js onpropertychange输入框 事件获取属性
2009/03/26 Javascript
初窥JQuery(二) 事件机制(1)
2010/11/25 Javascript
关于JavaScript中var声明变量作用域的推断
2010/12/16 Javascript
通过JavaScript使Div居中并随网页大小改变而改变
2013/06/24 Javascript
AngularJS基础 ng-include 指令简单示例
2016/08/01 Javascript
jquery使用EasyUI Tree异步加载JSON数据(生成树)
2017/02/11 Javascript
vue-router懒加载速度缓慢问题及解决方法
2018/11/25 Javascript
vue+echarts实现可拖动节点的折线图(支持拖动方向和上下限的设置)
2019/04/12 Javascript
vue把输入框的内容添加到页面的实例讲解
2019/11/11 Javascript
浅析Vue下的components模板使用及应用
2019/11/27 Javascript
jQuery实现王者荣耀手风琴效果
2020/01/17 jQuery
Vue+Element ui 根据后台返回数据设置动态表头操作
2020/09/21 Javascript
python处理文本文件实现生成指定格式文件的方法
2014/07/31 Python
详谈pandas中agg函数和apply函数的区别
2018/04/20 Python
利用Python如何将数据写到CSV文件中
2018/06/05 Python
Django 多语言教程的实现(i18n)
2018/07/07 Python
Python opencv实现人眼/人脸识别以及实时打码处理
2019/04/29 Python
python产生模拟数据faker库的使用详解
2020/11/04 Python
Canvas 文字碰撞检测并抽稀的方法
2019/05/27 HTML / CSS
科颜氏加拿大官方网站: Kiehl’s加拿大
2016/08/16 全球购物
英国领先的男士美容护发用品公司:Mankind
2016/08/31 全球购物
护理目标管理责任书
2014/07/25 职场文书
运动会稿件100字
2014/09/24 职场文书
四风问题对照检查整改措施思想报告
2014/10/05 职场文书
个人股份转让协议书范本
2015/01/28 职场文书
2015年教师节活动总结
2015/03/20 职场文书
学校党支部承诺书
2015/04/30 职场文书
postgres之jsonb属性的使用操作
2021/06/23 PostgreSQL
小程序实现悬浮按钮的全过程记录
2021/10/16 HTML / CSS
vue的项目如何打包上线
2022/04/13 Vue.js