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 相关文章推荐
10个基于Jquery的幻灯片插件教程
Oct 29 Javascript
关于jQuery参考实例2.0 用jQuery选择元素
Apr 07 Javascript
JS实现一个按钮的方法
Feb 05 Javascript
jQuery控制cookie过期时间的方法
Apr 07 Javascript
AngularJS基础 ng-model 指令详解及示例代码
Aug 02 Javascript
JS前端开发判断是否是手机端并跳转操作(小结)
Feb 05 Javascript
使用vue框架 Ajax获取数据列表并用BootStrap显示出来
Apr 24 Javascript
validationEngine 表单验证插件使用实例代码
Jun 15 Javascript
微信小程序基于本地缓存实现点赞功能的方法
Dec 18 Javascript
解决angularjs service中依赖注入$scope报错的问题
Oct 02 Javascript
Openlayers学习之地图比例尺控件
Sep 28 Javascript
利用js实现简单开关灯代码
Nov 23 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
Apache 配置详解(最好的APACHE配置教程)
2010/07/04 PHP
一个显示某段时间内每个月的方法 返回由这些月份组成的数组
2012/05/16 PHP
nginx下安装php7+php5
2016/07/31 PHP
AJAX 网页保留浏览器前进后退等功能
2011/02/12 Javascript
JavaScript中去掉数组中的重复值的实现方法
2011/08/03 Javascript
利用javascript的面向对象的特性实现限制试用期
2011/08/04 Javascript
JavaScript实现多维数组的方法
2013/11/20 Javascript
jQuery构造函数init参数分析
2015/05/13 Javascript
基于Jquery实现仿百度百科右侧导航代码附源码下载
2015/11/27 Javascript
JS数组操作(数组增加、删除、翻转、转字符串、取索引、截取(切片)slice、剪接splice、数组合并)
2016/05/20 Javascript
多功能jQuery树插件zTree实现权限列表简单实例
2016/07/12 Javascript
angular 动态组件类型详解(四种组件类型)
2017/02/22 Javascript
详解基于vue-router的动态权限控制实现方案
2017/09/28 Javascript
vue组件实现进度条效果
2018/06/06 Javascript
基于element-ui的rules中正则表达式
2018/09/04 Javascript
vue单页面在微信下只能分享落地页的解决方案
2019/04/15 Javascript
javascript数组常见操作方法实例总结【连接、添加、删除、去重、排序等】
2019/06/13 Javascript
[40:57]TI4 循环赛第二日 iG vs EG
2014/07/11 DOTA
[01:10:57]Liquid vs OG 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
把大数据数字口语化(python与js)两种实现
2013/02/21 Python
解决tensorflow测试模型时NotFoundError错误的问题
2018/07/27 Python
python matplotlib画图库学习绘制常用的图
2019/03/19 Python
Python爬虫过程解析之多线程获取小米应用商店数据
2020/11/14 Python
HTML5触摸事件演化tap事件介绍
2016/03/25 HTML / CSS
玩具反斗城天猫官方旗舰店:享誉全球的玩具店
2017/10/10 全球购物
英国家庭珠宝商:T. H. Baker
2018/02/08 全球购物
中专毕业自我鉴定
2013/10/16 职场文书
大学学习计划书范文
2014/05/02 职场文书
大学生精神文明先进个人事迹材料
2014/05/02 职场文书
运动会班级口号
2014/06/09 职场文书
中文专业自荐书
2014/06/29 职场文书
志愿者服务活动总结报告
2015/05/06 职场文书
2015年学校综合治理工作总结
2015/07/20 职场文书
2016春季田径运动会广播稿
2015/12/21 职场文书
比较node.js和Deno
2021/04/27 Javascript
一起来看看Vue的核心原理剖析
2022/03/24 Vue.js