zoukankan      html  css  js  c++  java
  • 用友畅捷通高级前端笔试题(一)凭借回忆写出

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

  • 相关阅读:
    160-13. 罗马数字转整数
    159-118. 杨辉三角
    158-190. 颠倒二进制位
    157-461. 汉明距离
    156-412. Fizz Buzz
    155-278. 第一个错误的版本
    154-108. 将有序数组转换为二叉搜索树
    153-101. 对称二叉树
    152-234. 回文链表
    秒杀程序架构演进
  • 原文地址:https://www.cnblogs.com/sexintercourse/p/5679473.html
Copyright © 2011-2022 走看看