• 用友畅捷通高级前端笔试题(一)凭借回忆写出


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

  • 相关阅读:
    OpenCV 最小二乘拟合方法求取直线倾角
    BFS-hdu-4101-Ali and Baba
    手机安全卫士开发系列(1)——功能列表
    【Linux常用工具】1.1 diff命令的三种格式
    手机安全卫士开发系列(2)——splash界面
    Ruby学习笔记(二)
    jQuery Animation实现CSS3动画
    HDU2699+Easy
    android中解析文件的三种方式
    查找某元素
  • 原文地址:https://www.cnblogs.com/sexintercourse/p/5679473.html
Copyright © 2020-2023  润新知