超实用的javascript代码段30道题目答案(3)

2019-08-01 22:52

28,

以下函数有什么问题?如何改进?

·11·

function initButtons() {

var body = document.body, button, i;

for (i = 0; i < 5; i++) {

button = document.createElement(\ button.innerHTML = \ + i;

button.addEventListener(\ (e) { alert(i); }, false);

body.appendChild(button); } }

答案:(1)问题在于点击元素的时候,始终是最后一个被保存的值,因为多次循环的函数,触发事件的i是指向同一个i,可以利用闭包解决这个问题,将遍历的变量作为参数传递进去,这样每个被创建的元素事件都是访问匿名函数语法结构域中的变量了。小提醒,JavaScript的闭包环境由静态的句法结构确定。也就是说,代码一旦写成,我们就知道函数的自由变量同哪些环境里的变量绑定。因此,虽然运行时同一个内函数被调用多次,创建了多个闭包,这些闭包指向的都是同一个环境里的同一个变量。这样同JavaScript规定的闭包语义一致。

(2)改进代码如下

function initButtons() {

var body = document.body, button, i;

for (i = 0; i < 5; i++) {

button = document.createElement(\ button.innerHTML = \

button.addEventListener(\ return function (e) { alert(j); };

}(i), false);

body.appendChild(button); } }

29, 判断一个字符串中出现次数最多的字符,统计出现的次数?

答案:代码如下

var str = \字符例子

strO = {}, //存每个字符出现的次数,有唯一性

max = -1,//出现最多的次数

· 12·

max_key = \出现最多次数的字符

key;

for (var i = 0, l = str.length; i < l; i++) {//过滤每个字符的出现个数 var key = str[i]; if (!strO[key]) { strO[key] = 1; } else {

strO[key]++; } }

for (key in strO) {//寻找次数最多的字符

if (max < strO[key]) { max = strO[key]; max_key = key; } }

console.log(\

30,

请问以下两段代码有什么不同吗?

setTimeout(function() { /* 代码块... */

setTimeout(arguments.callee, 10); }, 10);

setInterval(function(){ /*代码块... */ }, 10);

答案:这两段代码虽然看起来效果差不多,但是本质不一样。第1段回调函数内的setTimeout是等待JavaScript引擎运行之后,才开始设定setTimeout,在上一个设定没有处理完毕之前不会设定下一个定时,理论间隔时间>=10ms;第二段setInterval在设置之后,就会每间隔10ms定时的设置触发线程,理论上两个间隔触发执行的任务是<=10ms


超实用的javascript代码段30道题目答案(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2013《数据库原理及应用》实验报告答案

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: