題目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