zoukankan      html  css  js  c++  java
  • 变量不加 var 声明——掉进坑中,无法自拔!

    整整一下午,都在解决 window.onresize 中方法丢失不执行的问题!姿势固定在电脑前,颈椎病都犯了。

    前些日子与大家分享了一下关于 防止jquery $(window).resize()多次执行其中方法的文章,没写全,留了一大堆问题,我理解的方法是这样的:

    function foo() {
        var resizable = null;
        window.onresize = function() {
            if (resizable) {
                clearTimeout(resizable)
            }
            resizable = setTimeout(function(){
                //onresize 执行
                ss();
            },200)
        }
    }
    function ss(){
        //....
    }

    我们定义了一个变量 resizable 来存储 onresize 中需要执行的方法,起到了延迟执行并在一定时间内执行一次的作用。

    此处,若 var resizable = null; 变成 resizable = null; 想必问题不大,暂且认为只有一个方法和一个对象被调用,内存中也只有一个 resizable且是全部变量。

    接着有了这样的需求:多个 foo(obj) 方法在运行

    /*
     * 多个 foo(obj) 方法在运行
     */
    window.onload = function(){
        foo(obj001);
        foo(obj002);
        foo(obj003);
    }
    
    function foo(obj) {
        //第一次执行
        ss(obj);
    
        var resizable = null;
        window.onresize = function() {
            if (resizable) {
                clearTimeout(resizable)
            }
            resizable = setTimeout(function(){
                //onresize 执行
                ss(obj);
            },200)
        }
    }
    function ss(obj){
        //....
    }

    此处若是 esizable = null; 没有加上 var 声明,resizable = setTimeout(function(){ //onresize 执行 ss(obj); },200);中的方法就仅仅是 foo(obj003) 了。因为内存中也有一个 resizable且是全部变量,前两个被覆盖了。

    此次坠坑纯粹是自己不小心,害得自己浪费宝贵的绳命时间,换来颈肩腰腿痛,在此留帖,以警后时!

  • 相关阅读:
    粘包_Server
    初见UDP_Server
    初见UDP_Client
    TCP/UDP协议
    网络编程相关概念
    mmap实现大文件快速拷贝
    生成这消费者问题(多线程实现)
    线程同步互斥实现资源访问
    信号灯(线程互斥)
    线程属性
  • 原文地址:https://www.cnblogs.com/dereksunok/p/3895671.html
Copyright © 2011-2022 走看看