zoukankan      html  css  js  c++  java
  • js中常见面试问题-笔记


    原文参考https://mp.weixin.qq.com/s/mCVL6qI33XeTg4YGIKt-JQ

    1.事件代理
    给父元素添加事件,利用事件冒泡原理,在根据e.target来获取子元素
    <ul id="parentBox">
    <li class="item">1</li>
    <li class="item">2</li>
    <li class="item">3</li>
    </ul>
    let parentBox = document.getElementById('parentBox');
    parentBox.addEventListener('click',function(e){
    if(e.target && e.target.nodeName === 'LI'){
    let item = e.target;
    console.log(item);
    }
    })
    2.在循环中使用闭包
    var arr = [1,2,3,4,5];
    for(var i=0; i<arr.length; i++){
    setTimeout(function(){
    console.log(i)
    },1000)
    }
    输出结果为:5,5,5,5,5
    想要让i输出0,1,2,3,4
    方法一使用闭包
    for(var i=0; i<arr.length; i++){
    setTimeout(function(j){// 这里将值传入
    console.log(j)// 这里接受
    }(i),1000)// 闭包的使用
    }
    方法二let关键字
    for(let i=0; i<arr.length; i++){
    setTimout(function(){
    console.log(i)
    },1000)
    }
    3.滚动页面和窗口调整时,触发事件。
    核心思想利用setTimeout延迟功能,来处理事件。
    // 参数一接受执行函数,参数二延迟时间
    function debounce(fn,delay){
    // 维护一个timer
    let timer = null;
    // 能访问timer的闭包
    return function(){
    // 通过this和arguments获取函数的作用域和变量
    let context = this;
    let args = arguments;
    // 如果事件被调用,清除timer然后重新设置timer
    clearTimeout(timer);
    timer = setTimeout(function(){
    fn.apply(context,args);
    },delay);
    }
    }

  • 相关阅读:
    LeetCode 167. 两数之和 II
    LeetCode 97. 交错字符串
    LeetCode 35. 搜索插入位置
    LeetCode 120. 三角形最小路径和
    LeetCode 350. 两个数组的交集 II
    LeetCode 174. 地下城游戏
    LeetCode 315. 计算右侧小于当前元素的个数
    LeetCode 309. 最佳买卖股票时机含冷冻期
    面试题 17.13. 恢复空格
    去除字符串首尾空格
  • 原文地址:https://www.cnblogs.com/victory820/p/6882464.html
Copyright © 2011-2022 走看看