use*_*123 235 javascript settimeout
我正在学习JavaScript,最近我学到了关于JavaScript计时事件的知识.当我setTimeout
在W3Schools学习时,我注意到一个奇怪的人物,我之前没有遇到过.他们使用双引号然后调用该函数.
例:
setTimeout("alertMsg()", 3000);
Run Code Online (Sandbox Code Playgroud)
我知道JavaScript中的双引号和单引号表示字符串.
我也看到我可以这样做:
setTimeout(alertMsg, 3000);
Run Code Online (Sandbox Code Playgroud)
用括号表示,没有括号,它被复制.当我使用引号和括号时,它变得疯狂.
如果有人能向我解释这三种使用方式之间的区别,我将很高兴setTimeout
:
括号:
setTimeout("alertMsg()", 3000);
Run Code Online (Sandbox Code Playgroud)
没有引号和括号:
setTimeout(alertMsg, 3000);
Run Code Online (Sandbox Code Playgroud)
第三个是仅使用引号:
setTimeout("alertMsg", 3000);
Run Code Online (Sandbox Code Playgroud)
注意:更好的setTimeout
参考来源是MDN.
Jos*_*eph 378
setInterval
或setTimeout
您应该将对函数的引用作为setTimeout
or 的第一个参数传递setInterval
.该引用可以采用以下形式:
一个匿名函数
setTimeout(function(){/* Look mah! No name! */},2000);
Run Code Online (Sandbox Code Playgroud)现有函数的名称
function foo(){...}
setTimeout(foo, 2000);
Run Code Online (Sandbox Code Playgroud)指向现有函数的变量
var foo = function(){...};
setTimeout(foo, 2000);
Run Code Online (Sandbox Code Playgroud)
请注意,我将"函数中的变量"与"函数名称"分开设置.变量和函数名称占用相同的命名空间并且可以互相破坏,这一点并不明显.
要调用函数并传递参数,可以在分配给定时器的回调中调用函数:
setTimeout(function(){
foo(arg1, arg2, ...argN);
}, 1000);
Run Code Online (Sandbox Code Playgroud)
还有另一种方法可以将参数传递给处理程序,但它不是跨浏览器兼容的.
setTimeout(foo, 2000, arg1, arg2, ...argN);
Run Code Online (Sandbox Code Playgroud)
默认情况下,执行时回调的上下文(this
计时器调用的函数内部的值)是全局对象window
.如果您想更改它,请使用bind
.
setTimeout(function(){
this === YOUR_CONTEXT; // true
}.bind(YOUR_CONTEXT), 2000);
Run Code Online (Sandbox Code Playgroud)
虽然它是可能的,但你不应该将字符串传递给setTimeout
或setInterval
.将字符串传递使setTimeout()
或setInterval()
使用一个类似的功能,eval()
即执行字符串作为脚本,使得任意的和潜在的有害脚本执行可能的.
归档时间: |
|
查看次数: |
423881 次 |
最近记录: |