用友畅捷通高级前端笔试题(一)凭借回忆写出
题目1、
下面的html标签
<ul>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
......
</ul>
1、用js代码实现li的点击各不相同,不依赖js的库,不能改变li的属性和内容
2、兼容IE firefox chrome等主流浏览器
参考答案
<script> function newFunc() { var ul1 = document.getElementById('ul1'); var lis= ul1.getElementsByTagName("li"); var length=lis.length; for( var i=0;i<length;i++ ) { eval('lis[i].onclick = function (e) {e.stopPropagation();alert('+i+')}'); } } newFunc(); </script>
下面的代码采用闭包模式,但是行不通,有没有谁能告诉我1
1、闭包能不能解决
2、如果闭包能解决,怎么弄。
<script> function fn(i) { return function () { var j = i; alert(j); } } function newFunc() { var ul1 = document.getElementById('ul1'); var lis = ul1.getElementsByTagName("li"); var length = lis.length; for (i = 0; i < length; i++) { lis[i].onclick = function (e) { e.stopPropagation(); fn(i)(); } } } newFunc(); </script>
后来从网上找到的答案
<script> function fn(i) { return function () { var j = i; alert(j); } } function newFunc() { var ul1 = document.getElementById('ul1'); var lis = ul1.getElementsByTagName("li"); var length = lis.length; for (i = 0; i < length; i++) { (function (i) { lis[i].onclick = function () { alert(i); } })(i); } } newFunc(); </script>
经过好几个月的插件编写历程,终于领悟到闭包的用法 (2016年12月3日),感谢勤奋的自己。
一直被闭包困扰的我,终于实现了下面的案例,几乎将近完美的解决方案。
var elems = document.getElementsByTagName('a'); function keep(i){ var keep = i; return function(){ alert(keep); } } for (var i = 0; i < elems.length; i++) { var index elems[i].addEventListener('click', keep(i), 'false'); }
题目2、
如何实现js中的面向对象中的封装继承和多态。
参考答案
参考我的博文
http://www.cnblogs.com/sexintercourse/p/5679303.html
题目3、
如何拷贝一个对象
参考我的博客
http://www.cnblogs.com/sexintercourse/p/5679175.html
题目4、
自定义实现jquery中的bind方法
题目5、
console.log(0==false) true
console.log(1==true) true
console.log(2==false) false
console.log(2==true) false
console.log(undefined==false)false
console.log([] instanceof Array) true
console.log(typeof []=="array") false