发表于: 2020-08-02 00:46:50

1 1204


今天 买了本 算法书 。学了 二分查找法。

感觉 这本书上 逻辑 写的 非常棒。

guess 猜 

 low 最小 小标

high最大下标

mid = (low + high) / 2  中间 下标


 //guess binary_search 
        function binary_search(list, target) {
            var low = 0,
                high = list.length - 1,
                guess = 0,
                mid = 0;
            while (low <= high) {
                mid = Math.floor((low + high) / 2);
                guess = list[mid];
                if (guess == target) {
                    return mid;
                } else if (guess > target) {
                    high = mid - 1;
                } else {
                    low = mid + 1;
                }
            }
            return null;
        }



昨天的日报。


在比较 复杂的 逻辑 判断时候  变量名 一定要有意义  如   guess = list[mid]   用 guess == target    guess > target   guess < target 

多加个变量  不要省。



昨天 学了 下 JS 事件


JS 事件  3个阶段 

  (1)事件捕获 阶段

  ( 2 ) 事件 目标 阶段

  (3)事件 冒泡 阶段


看图理解 JS 事件 如果 不看图  直接 写代码 想  想 倒 都想不清楚。很多教程很垃圾。有时 光文字 是 解释不清楚 就算解释清楚 别人也听不全懂。


就上面 说的 JS 事件  分 3个阶段 其实 就是 一条线  画一个 圆圈  捕获 与 冒泡 不是 相互独立的 他们3个 是一个 连冠 的 “循环” 就是 1个整体。


useCapture:true 捕获执行 false 冒泡执行  可以先这样理解 捕获执行 比 冒泡执行 在时间上 要早一点。

element.addEventListener(eventfunctionuseCapture)
参数描述
event必须。字符串,指定事件名。

注意: 不要使用 "on" 前缀。 例如,使用 "click" ,而不是使用 "onclick"。

提示: 所有 HTML DOM 事件,可以查看我们完整的 HTML DOM Event 对象参考手册
function必须。指定要事件触发时执行的函数。

当事件对象会作为第一个参数传入函数。 事件对象的类型取决于特定的事件。例如, "click" 事件属于 MouseEvent(鼠标事件) 对象。
useCapture可选。布尔值,指定事件是否在捕获或冒泡阶段执行
可能值:
  • true - 事件句柄在捕获阶段执行
  • false- false- 默认。事件句柄在冒泡阶段执行



<body>

    <div id="box" style="widht:200px;height:200px;"></div>

</body>


window.onload = function(e) {

     var box=document.querySelector('#box');

     // 给 body添加 2个 事件 一个捕获 一个冒泡  执行 !!先写冒泡

    // 给 div 添加 2个 事件  一个冒泡  一个捕获  执行  !!先写冒泡

    document.body.addEventListener('click', function(){

          alert('body  冒泡阶段 执行');

    },false);

  

  document.body.addEventListener('click', function(){

          alert('body  捕获阶段 执行');

    },true);


   

   box.addEventListener('click', function(){

           alert('box  冒泡阶段 执行');

    },false);

  

   box.addEventListener('click', function(){

        alert('box  捕获阶段 执行');

    },true);


}


这里 先 理解 一下 什么事 目标阶段  谁是目标阶段 。

如果 你 在  box 点击   在 dom 里面   window > document > body > div#box     这一串 最后一个  box就是 目标 

如果 你在 body  点  box 下面 远点 点  加个 css   html,body{height:100%}   

这一串后面  window > document > body  最后一个  body 就是 目标 


事件捕获 和冒泡阶段  是 先捕获 后冒泡   目标阶段 就 不管了 也就是 addEventListenr(1,2, 3==true==fase)  第3个参数 不管了。

addEventListenr 可以 添加 很多事件  加在前面 先执行 后面 后执行。

这就是 目标阶段 执行 顺序


如果 点击了 div#box  先是  body 捕获(1个事件)  到  div#box 目标 (2个事件)到 body 冒泡(1个事件) 就是这么 一个 圈上到 关系。


防止冒泡和捕获  ==》 停止事件 再 圈上继续传  往下收不到 回来 也 没有。

w3c的方法是e.stopPropagation(),IE则是使用e.cancelBubble = true·


阻止默认行为  return false;

jQuery  事件里面 return false; 还会 防止冒泡和捕获  


e.preventDefault  阻止默认行为   


return false;和e.preventDefault; 看着有点 作用 相同 。也没 搞明白  。



返回列表 返回列表
评论

    分享到