博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
前端面试题(初探函数式编程、对象变量缓存)
阅读量:6614 次
发布时间:2019-06-24

本文共 1417 字,大约阅读时间需要 4 分钟。

<!DOCTYPE html>

<html>
<head>
<title>Quiz</title>
<meta charset="UTF-8">
</head>

<body οnlοad="load();" style="text-align:center;font-size:50px;">

<ul>
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
</ul>
</body>

<script>

function factorial(i) {
//some code
}

function load() {

var lis = document.getElementsByTagName('li');
for (var i = 0; i < lis; i++) {
lis.onclick = function () {
factorial(i);
}
}
}

</script>

</body>
</html>

需求:有一个列表,点击第i个li,弹出i的阶乘。

问题一:代码中有什么错误?哪里可以优化?

答:
错误:
1.i < lis应该是i < lis.length;
2.lis.onlick 应该是lis[i].onclick;
3.因为引入了闭包,onclick中直接调用factorial(i),弹出的都会是同样的结果,都会是lis.length的阶乘。可以通过再引入一个闭包解决;
lis.onclick = (function (i) {
return function () {
factorial(i);
}
})(i);
4.这种事件绑定方式造成了循环引用,在旧版本IE中会出现内存泄露,解决方法同3。

优化:

1.循环优化:储存length,++i,jquery循环,达夫机器;
2.事件绑定用事件监听方式,或用事件委托替代事件绑定。(此处可以继续问事件监听的兼容性和事件委托的原理)

问题二:实现阶乘函数。

一般答案:
function factorial(i) {
return i == 0 ? 1 : i * factorial(i - 1);
}

懒加载闭包实现:

function factorial(i) {
var cache = {};
factorial = function (i) {
console.log('count');
return cache[i] ? cache[i] : (cache[i] = i == 0 ? 1 : i * factorial(i - 1));
}
return factorial(i);
}

函数式编程实现:

function memorize(f) {
var cache = {};
return function (i) {
return cache[i] ? cache[i] : (cache[i] = f.call(null, i));
}
}

var factorial = memorize(function (i) {

console.log('conut');
return i == 0 ? 1 : i * factorial(i - 1);
});

转载于:https://www.cnblogs.com/haigelang/p/5082131.html

你可能感兴趣的文章
云安全:这也是需要花大钱去建设的部分
查看>>
5G网络不止能1秒下一部电影,它还能够…
查看>>
中国电信集采终端6700万部 金额达1070亿元
查看>>
2016年的十个数据中心故事
查看>>
《Java并发编程的艺术》一一3.3 顺序一致性
查看>>
《设计之外——比修图更重要的111件事》—第1部分3 虚心学习
查看>>
EVCache —— Netflix 的分布式内存数据存储
查看>>
《用友ERP-U8(8.72版)标准财务模拟实训》——1.4 系统管理注册和导入演示账套...
查看>>
springboot docker笔记
查看>>
Modbus RTU 通信工具设计
查看>>
服务化改造实践 | 如何在 Dubbo 中支持 REST
查看>>
【第8章】JVM内存管理
查看>>
ovirt官方安装文档 附录G
查看>>
磁盘故障小案例
查看>>
HTML
查看>>
【转】左手坐标系和右手坐标系
查看>>
我的友情链接
查看>>
POJ 3335 Rotating Scoreboard 半平面交
查看>>
域名和网址链接被微信浏览器拦截怎么办 微信屏蔽网址打开如何解决
查看>>
使用SQL Server Analysis Services数据挖掘的关联规则实现商品推荐功能(二)
查看>>