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 相关文章推荐
IE与firefox之jquery用法区别
Oct 03 Javascript
Prototype Object对象 学习
Jul 12 Javascript
jQuery simplePage+AJAX plus分页插件用法实例
Feb 17 Javascript
javascript实现label标签跳出循环操作
Mar 06 Javascript
jQuery自定义数值抽奖活动代码
Jun 11 Javascript
JS动态给对象添加事件的简单方法
Jul 19 Javascript
火狐和ie下获取javascript 获取event的方法(推荐)
Nov 26 Javascript
JavaScript中无法通过div.style.left获取值的解决方法
Feb 19 Javascript
详解VueRouter进阶之导航钩子和路由元信息
Sep 13 Javascript
BootStrap TreeView使用实例详解
Nov 01 Javascript
微信小程序 冒泡事件原理解析
Sep 27 Javascript
简单了解常用的JavaScript 库
Jul 16 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中用header图片地址 简单隐藏图片源地址
2008/04/09 PHP
微信自定义菜单的创建/查询/取消php示例代码
2016/08/05 PHP
php 可变函数使用小结
2018/06/12 PHP
确保Laravel网站不会被嵌入到其他站点中的方法
2019/10/18 PHP
锋利的jQuery jQuery中的DOM操作
2010/03/21 Javascript
jQuery 源码分析笔记(2) 变量列表
2011/05/28 Javascript
JavaScript 基础篇(一)
2012/03/30 Javascript
js移除事件 js绑定事件实例应用
2012/11/28 Javascript
javascript实现控制浏览器全屏
2015/03/30 Javascript
原生JavaScript实现瀑布流布局
2020/06/28 Javascript
详解WordPress开发中get_current_screen()函数的使用
2016/01/11 Javascript
简单实现js悬浮导航效果
2017/02/05 Javascript
值得收藏的vuejs安装教程
2017/11/21 Javascript
对vuejs的v-for遍历、v-bind动态改变值、v-if进行判断的实例讲解
2018/08/27 Javascript
微信小程序实现跳转的几种方式总结(推荐)
2019/04/24 Javascript
Nuxt v-bind绑定img src不显示的解决
2019/12/05 Javascript
基于JavaScript获取url参数2种方法
2020/04/17 Javascript
浅谈JavaScript中this的指向更改
2020/07/28 Javascript
[33:39]DOTA2上海特级锦标赛C组小组赛#2 LGD VS Newbee第二局
2016/02/27 DOTA
[01:34]DOTA2 7.22版本新增神杖效果一览(敏捷英雄篇)
2019/05/28 DOTA
Python中的MongoDB基本操作:连接、查询实例
2015/02/13 Python
Python找出文件中使用率最高的汉字实例详解
2015/06/03 Python
python2.7的编码问题与解决方法
2016/10/04 Python
Python实现的视频播放器功能完整示例
2018/02/01 Python
python selenium自动上传有赞单号的操作方法
2018/07/05 Python
不知道这5种下划线的含义,你就不算真的会Python!
2018/10/09 Python
python 扩展print打印文件路径和当前时间信息的实例代码
2019/10/11 Python
快速解释如何使用pandas的inplace参数的使用
2020/07/23 Python
Python 调用C++封装的进一步探索交流
2021/03/04 Python
一款利用css3的鼠标经过动画显示详情特效的实例教程
2014/12/29 HTML / CSS
New Balance加拿大官方网站:运动鞋和健身服装
2018/11/19 全球购物
服务承诺书格式
2014/05/21 职场文书
庆六一宣传标语
2014/10/08 职场文书
学生通报表扬范文
2015/05/04 职场文书
通用员工手册范本
2015/05/14 职场文书
三严三实学习心得体会(精选N篇)
2016/01/05 职场文书