• 浏览器学习笔记-11 settimeout


    settimeout

    使用

    语法

    setTimeout(code,millisec)
    
    参数 描述
    code 必需。要调用的函数后要执行的 JavaScript 代码串。
    millisec 必需。在执行代码前需等待的毫秒数。最低延时是 4ms

    this

    超时调用的代码都是在全局作用域中执行的,因此函数中this的值在非严格模式下指向window对象,在严格模式下是undefined

    1.
    
    setTimeout("alert(this)", 1);   //alert: [object Window]
    
    2.
    
    var obj = {
        say : function () {
            setTimeout(function () {
                console.log('setTimeout:'+this);
            },0);
        },
        hello : function () {
            console.log('hello:'+this);
        }
    };
    obj.say();   //setTimeout:[object Window]
    
    obj.hello();   //hello:[object Object]
    
    3.
    var hello = function () {
        alert( this );
    }
    var obj = {
        say : function () {
            setTimeout( hello ,1 );
        }
    };
    obj.say();   //[object Window]
    
    
    4.
    var value = 33;
    
    function Foo() {
        var value = 42;
        setTimeout(function() {
            alert(value);
            alert(this.value)
        }, 500); // 先输出 42 然后输出33  这里的this是第二个this
    }
    new Foo();
    
    5.
    var obj = {
      name: 'hutaoer',
      say: function() {
        var self = this;
        setTimeout(function(){
          alert(self);   // 输出 object ,指向obj
          alert(this);   // 第二个this,指向window,我心永恒,从未改变
          alert(self.name)  // 输出 hutaoer
        }, 0)
      }
    }
    
    obj.say();
    
    6.
    
    var value=33;
    function Foo() {
        var value = 42;
        function ff() {
          alert(value);  // 42
          alert(this.value);  // 33
        }
        setTimeout(ff, 500);  // 先后输出 42   33
    }
    Foo(); // 直接执行,跟普通函数没有区别
    
    

    一、setTimeout中的延迟执行代码中的this永远都指向window
    二、setTimeout(this.method, time)这种形式中的this,即上文中提到的第一个this,是根据上下文来判断的,默认为全局作用域,但不一定总是处于全局下,可能处于对象内部。
    三、setTimeout(匿名函数, time)这种形式下,匿名函数中的变量也需要根据上下文来判断,根据函数作用域,有函数的位置的词法作用域来确定。

  • 相关阅读:
    为什么要用getBaseContext()方法代替this?(转)
    如何让EditText不能自动获取焦点(转)
    context和getApplicationContext()的区别
    Idea 破解
    mysql 免安装
    AngularJS
    GC垃圾回收机制
    JVM类加载机制
    线程池
    面试-数据库
  • 原文地址:https://www.cnblogs.com/SLchuck/p/13738592.html
Copyright © 2020-2023  润新知