JavaScript中setTimeout和setInterval函数的传参及调用
关于传参。看下面的代码:
```javascript
var str = 'aaa';
var num = 2;
function auto(a){
alert(a);
}
setTimeout('auto(str)',0);
```
这种方式其实是将`auto(str)`当作字符串传递,而非将函数和参数作为回调。这种方式不如直接将函数和参数作为回调传递的方式来得直观和有效。如果想传递除字符串以外的参数,可以使用闭包。例如:
```javascript
var num = 2;
function test(){
var str = 'bbb';
setTimeout(auto(str),0);
}
function auto(str){
return function(){
alert(str);
}
}
test();
```
在这个例子中,通过闭包将变量`str`传递给定时器执行的函数。值得注意的是,如果不使用闭包直接传递参数,定时器调用的函数需要加引号,否则会出现错误。同样的情况也适用于setInterval函数。
接下来,关于setTimeout和setInterval中的函数调用。看下面的代码:
```javascript
var num = 2;
function auto(){
alert(num);
}
setTimeout(auto(),0);
```
这段代码会在页面加载后立即弹出警告框,因为定时器执行的是已经执行完成的函数返回值,而不是函数本身。定时器并未起到作用。要让定时器正常工作,需要将函数名(不带括号)传递给setTimeout或setInterval,例如:
```javascript
setInterval('auto()',0);
setTimeout('auto()',0);
```
这种方式可以让程序正常工作,定时器会定期或延迟调用`auto`函数。如果不使用`auto()`调用函数,只使用函数名`auto`,同样需要利用闭包等技术来正确传递参数。理解JavaScript中函数的调用方式和参数的传递方式对于正确使用setTimeout和setInterval非常重要。JavaScript的奥秘:函数调用的差异与定时器的魔力
在JavaScript的世界里,代码的执行方式有时令人着迷。让我们深入一段简单的代码,理解其中的奥妙。
假设我们有以下代码:
```javascript
var str = 'aaa';
var num = 2;
function auto(){
alert(num);
}
setTimeout(auto,0);
```
这段代码定义了一个名为`auto`的函数,它会在4秒后(0毫秒)通过`setTimeout`函数执行,弹出一个警告框显示变量`num`的值。这样写,程序可以正常工作。
如果我们尝试使用字符串形式来调用函数,情况就会发生变化。例如:
```javascript
setTimeout('auto',0);
```
这段代码看起来和上面的很相似,但关键的区别在于`auto`的调用方式。在这里,`'auto'`是一个字符串,而不是一个函数对象。JavaScript会尝试将这个字符串为代码并执行,但由于安全原因,它不允许这样做。这段代码无法正常执行。
再来看另一个例子:
```javascript
//setInterval('auto',0);
```
这段代码尝试使用`setInterval`函数每隔4秒执行一次`auto`函数。但由于同样的原因,使用字符串形式的函数调用也会失败。这是因为`setInterval`和`setTimeout`期望接收的是一个函数作为第一个参数,而不是一个字符串。当它们接收到字符串时,会尝试将其为代码并执行,这在大多数情况下是不允许的。如果你想使用定时器来调用函数,应该直接传递函数对象作为参数,而不是函数的字符串表示形式。这就是JavaScript中函数调用的基本规则。理解了这一点,我们就可以避免很多常见的错误和困惑。至于那句“cambrian.render('body')”,我们需要更多的上下文信息才能给出准确的解释。
编程语言
- JavaScript中setTimeout和setInterval函数的传参及调用
- asp google pr查询代码
- web站点获取用户IP的安全方法 HTTP_X_FORWARDED_FOR检验
- 详解Laravel设置多态关系模型别名的方式
- 67 个节约开发时间的前端开发者的工具、库和资
- 收集整理的ASP的常用内置函数
- Angular2中如何使用ngx-translate进行国际化
- 动态JavaScript所造成一些你不知道的危害
- 基于HBase Thrift接口的一些使用问题及相关注意事
- json格式数据的添加,删除及排序方法
- PHP实现中国公民身份证号码有效性验证示例代码
- YII框架学习笔记之命名空间、操作响应与视图操
- asp.net实现将Excel中多个sheet数据导入到SQLSERVER中的
- 教你免费做一个属于自己稳定有效的图床-PicGo
- 防止别人盗链的好方法推荐
- ASP.NET中实现根据匿名类、datatable、sql生成实体类