这两天因为其他的人际关系的事要处理,所以耽误了两天的学习。正好,也有两天的时间冷静一下让我今天好好思考这个难倒我好几天的问题。 先把示例代码贴出来(《JavaScript DOM编程艺术》p131): function displayAbbreviations() { if (!document.getElementsByTagName || !document.createElement || !document.createTextNode) return false; // 取得所有缩略词 var abbreviations = document.getElementsByTagName("abbr"); if (abbreviations.length < 1) return false; // 创建一个数组,保存缩略词及其定义 var defs = new Array(); // 遍历所有缩略词 for (var i=0; i<abbreviations.length; i++) { var current_abbr = abbreviations[i]; if (current_abbr.childNodes.length < 1) continue; var definition = current_abbr.getAttribute("title"); var key = current_abbr.lastChild.nodeValue; defs[key] = definition; } // 创建定义列表 var dlist = document.createElement("dl"); // 遍历数组中缩略词及其定义 for (key in defs) { var definition = defs[key]; // 创建定义标题 var dtitle = document.createElement("dt"); var dtitle_text = document.createTextNode(key); dtitle.appendChild(dtitle_text); // 创建定义描述 var ddesc = document.createElement("dd"); var ddesc_text = document.createTextNode(definition); ddesc.appendChild(ddesc_text); // 把它们添加到定义列表 dlist.appendChild(dtitle); dlist.appendChild(ddesc); } if (dlist.childNodes.length < 1) return false; // 创建标题 var header = document.createElement("h2"); var header_text = document.createTextNode("Abbreviations"); header.appendChild(header_text); // 把标题添加到页面主体 document.body.appendChild(header); // 把定义列表添加到页面主体 document.body.appendChild(dlist); } addLoadEvent(displayAbbreviations); 目前遇到6个问题: 1. 我们在定义一个函数时如何判断是否需要参数,如果需要参数,那么参数用哪一个变量表示?(自己Google) 2. 为什么用新数组var defs = new Array();存储数据的时候要写成defs[key] = definition;的形式而不是defs[definition] = key;的形式?我们定义一个新的数组来存储两组数据的时候有什么规律?需要存储3组数据的时候要怎么运用数组? 3. 为什么for (key in defs) { var definition = defs[key];…}即表示“遍历”这个数组以创建各个列表项?这里的key和前一个循环所命名的变量key还是同一个key的含义吗?var definition = defs[key];和前一个循环里的defs[definition] = key;之间有关系吗? 4. 为什么这个代码示例用的是if (abbreviations.length < 1) return false;来检测是否存在缩略语,而另外一个显示“文献来源链接表”里不用检测是否存在blockquote元素,而是检测blockquote元素是否有cite属性? 5. 检测同一个属性的两种表达方式:①if (!current_link.getAttribute("accesskey")) continue;②if (current_link.getAttribute("accesskey").length < 1) continue;我把第②种替换第①种为什么第②种不行? 6. 我把代码var defs = new Array();和var dlist = document.createElement("dl");放入相邻的for循环语句里,为什么不可以?(我猜这个属于作用域的问题,第3个问题应该也有涉及,但是我去查《JavaScript高级程序设计》时课本里说JavaScript不存在块级作用域的问题,那么同一个函数内创建的新变量不是可以在函数里到处用?) 被这个问题搞了好几天,想了很久真心想不出来了。之前有问过一个前辈,但我认为他没有解决我的问题。决定今晚问问其他人,试试看去知乎上找比较专业的人私信问问他们。
这两天因为其他的人际关系的事要处理,所以耽误了两天的学习。正好,也有两天的时间冷静一下让我今天好好思考这个难倒我好几天的问题。
先把示例代码贴出来(《JavaScript DOM编程艺术》p131):
目前遇到6个问题:
1. 我们在定义一个函数时如何判断是否需要参数,如果需要参数,那么参数用哪一个变量表示?(自己Google)
2. 为什么用新数组var defs = new Array();存储数据的时候要写成defs[key] = definition;的形式而不是defs[definition] = key;的形式?我们定义一个新的数组来存储两组数据的时候有什么规律?需要存储3组数据的时候要怎么运用数组?
3. 为什么for (key in defs) { var definition = defs[key];…}即表示“遍历”这个数组以创建各个列表项?这里的key和前一个循环所命名的变量key还是同一个key的含义吗?var definition = defs[key];和前一个循环里的defs[definition] = key;之间有关系吗?
4. 为什么这个代码示例用的是if (abbreviations.length < 1) return false;来检测是否存在缩略语,而另外一个显示“文献来源链接表”里不用检测是否存在blockquote元素,而是检测blockquote元素是否有cite属性?
5. 检测同一个属性的两种表达方式:①if (!current_link.getAttribute("accesskey")) continue;②if (current_link.getAttribute("accesskey").length < 1) continue;我把第②种替换第①种为什么第②种不行?
6. 我把代码var defs = new Array();和var dlist = document.createElement("dl");放入相邻的for循环语句里,为什么不可以?(我猜这个属于作用域的问题,第3个问题应该也有涉及,但是我去查《JavaScript高级程序设计》时课本里说JavaScript不存在块级作用域的问题,那么同一个函数内创建的新变量不是可以在函数里到处用?)
被这个问题搞了好几天,想了很久真心想不出来了。之前有问过一个前辈,但我认为他没有解决我的问题。决定今晚问问其他人,试试看去知乎上找比较专业的人私信问问他们。