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 相关文章推荐
window.open的功能全解析
Oct 10 Javascript
JS实现下拉框的动态添加(附效果)
Apr 03 Javascript
js绑定事件this指向发生改变的问题解决方法
Apr 23 Javascript
基于jQuery+JSON的省市二三级联动效果
Jun 05 Javascript
javascript设计模式之对象工厂函数与构造函数详解
Jul 30 Javascript
jQuery实现图片渐入渐出切换展示效果
Aug 15 Javascript
jQuery 中的 DOM 操作
Apr 26 Javascript
JavaScript 冒泡排序和选择排序的实现代码
Sep 03 Javascript
AngularJS用户选择器指令实例分析
Nov 04 Javascript
浅谈JS对html标签的属性的干预以及对CSS样式表属性的干预
Jun 25 Javascript
JavaScript实现多叉树的递归遍历和非递归遍历算法操作示例
Feb 08 Javascript
javascript实现前端分页功能
Nov 26 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
WordPress中使主题支持小工具以及添加插件启用函数
2015/12/22 PHP
PHP基于单例模式实现的数据库操作基类
2016/01/15 PHP
PHP+swoole实现简单多人在线聊天群发
2016/01/19 PHP
Laravel 实现密码重置功能
2018/02/23 PHP
javascript 密码强弱度检测万能插件
2009/02/25 Javascript
JQuery this 和 $(this) 的区别
2009/08/23 Javascript
javascript与CSS复习(三)
2010/06/29 Javascript
javascript陷阱 一不小心你就中招了(字符运算)
2013/11/10 Javascript
为指定的元素添加遮罩层的示例代码
2014/01/15 Javascript
js控制href内容的连接内容的变化示例
2014/04/30 Javascript
js简单实现交换Li的值
2014/05/22 Javascript
JavaScript图片轮播代码分享
2015/07/31 Javascript
如何用JavaScript实现动态修改CSS样式表
2016/05/20 Javascript
一种Javascript解释ajax返回的json的好方法(推荐)
2016/06/02 Javascript
AngularJS基础 ng-selected 指令简单示例
2016/08/03 Javascript
Vue精简版风格概述
2018/01/30 Javascript
JavaScript展开操作符(Spread operator)详解
2019/07/20 Javascript
Vue CLI3移动端适配(px2rem或postcss-plugin-px2rem)
2020/04/27 Javascript
python字符串对其居中显示的方法
2015/07/11 Python
python使用clear方法清除字典内全部数据实例
2015/07/11 Python
python实现雨滴下落到地面效果
2018/06/21 Python
python统计多维数组的行数和列数实例
2018/06/23 Python
python与caffe改变通道顺序的方法
2018/08/04 Python
python datetime处理时间小结
2020/04/16 Python
django日志默认打印request请求信息的方法示例
2020/05/17 Python
Python基于yaml文件配置logging日志过程解析
2020/06/23 Python
Python实现手势识别
2020/10/21 Python
python 简单的调用有道翻译
2020/11/25 Python
解决PDF 转图片时丢文字的一种可能方式
2021/03/04 Python
绢花、人造花和人造花卉:BLOOM
2019/08/07 全球购物
优秀的教师个人的中文求职信
2013/09/21 职场文书
语文教育专业求职信
2014/06/28 职场文书
党员对照检查材料
2014/09/22 职场文书
教师学习十八届五中全会精神心得体会
2016/01/05 职场文书
JavaScript 实现页面滚动动画
2021/04/24 Javascript
MySQL数据库实验之 触发器和存储过程
2022/06/21 MySQL