首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

cocosCreator关于setTimeOut和setInterval改变this指向问题

setTimeOut()或setInterval()这样方法,如果传入函数包含this,那么,默认情况下,函数this会指向window对象。...这是由于setTimeout()调用代码运行在与所有函数完全分离执行环境上。这回导致这些代码包含this关键字会指向window对象。...,this总是指向词法作用域,也就是外层调用者obj,因此利用箭头函数就可以轻松解决这个问题 function broadInter(){ setInterval(()=>{...函数是否在new调用(new绑定),如果是,那么this绑定是新创建对象。 函数是否通过call,apply调用,或者使用了bind(即硬绑定),如果是,那么this绑定就是指定对象。...函数是否在某个上下文对象调用(隐式绑定),如果是的话,this绑定是那个上下文对象。一般是obj.foo()。 如果以上都不是,那么使用默认绑定。

93920

JavaScriptPromise里代码为什么比setTimeout先执行?

setTimeout 这样 API,它会允许 JavaScript 在特定时机执行。...所以,我们首先应该形成一个感性认知:一个 JavaScript 引擎会常驻于内存,它等待着我们(宿主)把 JavaScript 代码或者函数传递给它执行。...在 ES3 和更早版本JavaScript 本身还没有异步执行代码能力,这也就意味着,宿主环境传递给 JavaScript 引擎一段代码,引擎就把代码直接顺次执行了,这个任务也就是宿主发起任务...在宏观任务JavaScript Promise 还会产生异步代码,JavaScript 必须保证这些异步代码在一个宏观任务完成,因此,每个宏观任务又包含了一个微观任务队列: 有了宏观任务和微观任务机制...JavaScript 引擎内部微任务,而 setTimeout 是浏览器 API,它产生宏任务。

82720

重新认识javascriptsettimeout和异步

今晚看到QLeelulu一道JavaScript面试题(setTimeout),稍微想了一下,好不容易连猜带蒙,凑巧说对了答案。但是原因到底是什么呢?...然后看了一下文章下面的评论,发现5楼和6楼回答很有道理,主要意思就是说javascript引擎是单线程执行,while循环那里执行时候,settimeout里面的函数根本没有执行机会,这样while...也就是说第一个settimeout里执行时候是一个死循环,这个直接导致了理论上比它晚一秒执行第二个settimeout函数被阻塞,这个和我们平时所理解异步函数多线程互不干扰是不符。...message\":\"" + action + "\"}"; context.Response.Write(jsonObject); } 理论上,如果ajax异步请求,它异步回调函数是在单独一个线程...结论:根据实践结果,可以得出,javascript引擎确实是单线程处理它任务队列(能理解成就是普通函数和回调函数构成队列吗?)

94290

你不知道Javascript:有趣setTimeout

今天在回顾JavaScript进阶用法时候,发现一个有趣问题,话不多说,先上代码: for(var j=0;j<10;j++){ setTimeout(function(){console.log...那么现在关键问题在于,为什么整个for循环会先于setTimeout执行,而不是我们正常理解,一次迭代执行一次。 这就涉及到了JavaScript核心特性:单线程。...每次for循环迭代,都将setTimeout回调函数加入任务队列等待执行。...也就是说,只有同步任务for循环完全结束,主线程才会去任务队列中找到尚未执行十个setTimeout(十次迭代)回调函数并顺序执行(先进先出)。...) setTimeout(console.log(i),5000) setTimeout(console.log(i),5000) 小小一个setTimeout,牵扯出了很多JavaScript深层次问题

709100

你不知道Javascript:有趣setTimeout

有时候,小小细节往往隐藏着大大智慧 今天在回顾JavaScript进阶用法时候,发现一个有趣问题,话不多说,先上代码: for(var j=0;j<10;j++){ setTimeout(function...那么现在关键问题在于,为什么整个for循环会先于setTimeout执行,而不是我们正常理解,一次迭代执行一次。 这就涉及到了JavaScript核心特性:单线程。...每次for循环迭代,都将setTimeout回调函数加入任务队列等待执行。...也就是说,只有同步任务for循环完全结束,主线程才会去任务队列中找到尚未执行十个setTimeout(十次迭代)回调函数并顺序执行(先进先出)。...(console.log(i),5000) setTimeout(console.log(i),5000) 小小一个setTimeout,牵扯出了很多JavaScript深层次问题,虽然总结成一篇文章只有区区数百字

80740

JavaScriptthis指向问题

JavaScriptthis关键字 在JavaScript,关键字 this 是一个特殊对象,它在函数被调用时自动创建。通常用来指向当前执行函数所属对象。...通过这个过程,我们可以看到,当使用new关键字调用构造函数时,JavaScript会自动将构造函数this绑定到新创建实例上。...箭头函数作为setTimeout回调函数,它继承了父级作用域中this(即obj对象),所以在箭头函数可以访问到this.name。...实际应用,常见this指向问题 在嵌套函数丢失this:当在一个函数内部定义另一个函数,并在内部函数中使用this时,this指向会发生变化。...可以使用箭头函数或通过在外部函数中将this赋值给一个变量来解决这一问题。 事件处理函数this:在事件处理函数,this通常指向触发事件元素。

19960

JavaScriptthis指向问题

1、什么是this this一般指向是调用它对象,比如调用它上下文是window对象,那就是指向window对象,如果调用它上下文是某对象就是指向某对象…… //例如 console.log...2、用来干嘛 this在一般情况下,是指向函数上下文,可以处理一些作用域下事件调用 如果想要引用某对象方法,就不用写太多重复代码,直接用this调用某对象方法 3、怎么在代码中使用 console.log...都可以改变函数执行上下文 注:改变上下文可以为程序节省内存空间,减少不必要内存操作 通俗易懂解释改变上下文: 小张在公司有个快递要拿,刚好有事,自己拿不了,他就安排小王拿,这里小张本来是拿快递执行上下文...,因为有事,就改变拿快递执行上下文,变成了小王,节约了小张时间,他就不用另外安排时间去拿快递了 不同点 call、apply是立即执行,bind是不会立即执行,而是返回一个回调函数,执行时需要加个...,可以把参数通过数组形式进行传递 ?

1.1K11

关于setTimeout和setInterval函数参数问题

今天在写验证码倒计时小demo时,用了如下代码: window.setTimeout(count(num),1000); 这样直接使用将使count函数立即执行,并将返回值传递给setTimeout函数作为参数...,其结果并不是真正需要,所以会出现问题。...方法一 使用字符串形式可以达到想要结果: window.setTimeout("count(num)",1000); 这是我以前常用方法。 但这种写法是将函数包在引号里,有点像字符串,不够直观。...在 window.setTimeout函数,使用_count(30)来返回一个不带参数函数,此时不需要用引号也实现了参数传递功能。...其实还可以直接写成: window.setTimeout(function(){count(30);},1000); 另外也有人通过修改setTimeout、setInterval来实现。

1.9K20

JSsetTimeout是如何实现

我们知道 Javascript引擎是单线程,而setTimeout方法作用是延后执行目标代码,同时还可以继续往下执行 setTimeout是如何实现?...这涉及到了浏览器内核事件循环模型,在Javascript引擎之外,有一个任务队列,当执行到setTimeout时,延时方法会交给内核其他模块处理(与执行引擎主线程独立),当延时方法到达触发条件,这一延时方法被添加至任务队列里...,执行引擎在主线程方法执行完毕后,会从任务队列顺序获取任务来执行,这一过程是一个不断循环过程,称为事件循环模型 下面通过一段示例代码,看一下整个执行过程 console.log('1'); setTimeout...(2)setTimeout test入栈执行 交由webapis处理 ? (3)log('3')入栈执行 ?...(4)在setTimeout方法执行5秒后,timer模块检测到延时处理方法到达触发条件,于是将延时处理方法加入任务队列 ?

3.3K80

jssettimeout()用法详解_jssetattribute

大家好,又见面了,我是你们朋友全栈君。 setTimeout与setTimeInterval均为window函数,使用顶层window一般都会省去,这两个函数经常稍不留神就使用错了。...setTimeout函数先不执行,隔一段时间后再执行,函数后面的数字是隔时间,单位是毫秒(千分之一秒) 比如: setTimeout(‘alert(“hello world!”)’..., 400); setInterval() 方法可按照指定周期(以毫秒计)来调用函数或计算表达式,直到clearInterval()被调用或窗口被关闭。 比如: Stop interval setInterval动作作用是在播放动画时...如发现本站有涉嫌侵权/违法违规内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

14.9K20
领券