JS DOM编程艺术 第二版 第8章 abbreviations问题

https://codepen.io/deepblue19...

源码采用首先遍历标签<abbr>,

然后将获取数据存入一个'关联数组',

(<abbr>的文本节点做key,<abbr>的一个属性title的值做数组的value)

我不能理解为何要设置一个数组,然后再从数组中取值,先存后取很有存在感?

于是我没采用书中方法,直接这样:

var abbr = document.getElementsByTagName("abbr");
if (abbr.length < 1) return false;
var dlist = document.createElement("dl");
for (var i = 0; i < abbr.length; i++) {
    var definition = abbr[i].getAttribute("title");
    var text = abbr[i].innerText;

    var dtitle = document.createElement("dt");
    var dtitle_text = document.createTextNode(definition);
    dtitle.appendChild(dtitle_text);

    var ddesc = document.createElement("dd");
    var ddesc_text = document.createTextNode(text);
    ddesc.appendChild(ddesc_text);

    dlist.appendChild(ddesc);
    dlist.appendChild(dtitle);
   }
document.body.appendChild(dlist);

用某个IDE(HBuilder)的内置browser,成功了,但 chrome、firefox 都无法通过。

用Jslinter查错,提示:

if (abbr.length < 1) return false;
>> index.js: 'return' outside of function (2:23)

我一个菜鸟新人,也不知道怎么弄,于是就删除此条。

然后,就一切OK了~~

WHY????

阅读 1.7k
2 个回答

return只能写在函数中

首先你写的代码是没问题的,之所以报错是因为jslint对格式有严格的要求的原因,你删除这一行不再报错就说明了这一点, 你代码中abbr.length是大于1的,所以这行代码的作用可以忽略,你删除后就ok了

至于作者为什么要创建数组保存数据,可能出于其他目的,比如再次应用这些数据就不必再执行这个函数直接应用这个数组就ok了。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题