ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

浏览器学习笔记-11 settimeout

2020-09-27 12:00:46  阅读:168  来源: 互联网

标签:11 function setTimeout 浏览器 value alert var obj 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)这种形式下,匿名函数中的变量也需要根据上下文来判断,根据函数作用域,有函数的位置的词法作用域来确定。

标签:11,function,setTimeout,浏览器,value,alert,var,obj,settimeout
来源: https://www.cnblogs.com/SLchuck/p/13738592.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有