`

JavaScript 使用定时器传入“2010-10-15”的参数 被内部eval

阅读更多

今天遇到一个有点小郁闷的问题。

看代码:

<html>
<head>
<script>
function b(id, id2)
{
   alert(id + "---->" + id2);
}
function a()
{
   var c = '123';
   var    s   =   "2005-12-15";
   window.setInterval("b(" + c + "," + s + ")", 100);
}
a();
</script>
</head>
<html>

 

弹出:

 


 


  

 我想应该不对啊,所以就做了一下的修改!

<html>
<head>
<script>
function b(id, id2)
{
   alert(id + "---->" + id2);
}
function a()
{
   var c = '123';
   var s =  "2005-12-15";
   window.setInterval(b(c, s), 100);
}
a();

</script>
</head>
<html>

 

 嘿嘿 可以了!但不明白为什么。

 


 

最后我想是不是
按照我那个写法,出来就是1978
在内部被eval("2005-12-15") ,掉了
“-” 这个符号被当作减号了

果然是这个问题。那就是闭包的问题了

所以我又修改了一下

<html>
<head>
<script>
ffunction b(id, id2)
{
   alert(id + "-->" + id2);
}
function a()
{
   var c = '123';
   var s = '2005-12-15';
   window.setInterval("b('"+c+"','"+s+"')", 100);
}
a();
</script>
</head>
<html>

 



 嘿嘿 弹出结果为:


呵呵 解决。

 

不过 对于 JavaScript里面的闭包问题 我还是不是很明白 所以有待以后再去深入了。
 

 

  • 大小: 7 KB
  • 大小: 7.1 KB
分享到:
评论

相关推荐

    JavaScript试题

    - 可以使用 `eval()` 来计算字符串表达式的值。 - 函数不一定需要 `return` 语句,但如果没有返回值,则返回 `undefined`。 - 函数的命名规则与变量类似。 - **事件处理**: - **事件** 是用户与页面交互时触发...

    JavaScript笔记

    作用:不设置任何的形参的情况下,自动接收所有传入参数 arguments.length:获得参数个数 arguments[i]:获得每个参数--都要判断和类型转换 22.全局函数:不用任何对象点(.)就可以调用--可用于所有的 JavaScript...

    Secrets of the JavaScript Ninja (Manning MEAP 2009).pdf 电子书

    - **eval()**:探讨了`eval()`函数的使用及其潜在的安全风险。 - **new Function**:讲解了`new Function`构造函数的用法及其局限性。 - **在全局作用域中执行**:介绍了如何在全局作用域中执行代码字符串。 - **...

    JavaScript 基础教程(精简版)

    函数是可重复使用的代码块,JavaScript函数不需预先声明参数数量,可以接受任意数量的参数。`arguments`对象用于访问函数调用时传入的实际参数。 5. **属性** JavaScript中,属性分为全局属性和内部属性。全局...

    JS动画定时器知识总结

    在使用定时器时,如果传入的函数是一个字符串形式,将会产生性能问题,因为JavaScript引擎需要将字符串解析成可执行的代码,这相当于执行了eval()函数,会带来额外的性能开销。因此,推荐总是以函数的形式来传入。 ...

    javascript面试题目

    - **选项C**: `eval` - 用于执行字符串作为JavaScript代码。 - **选项D**: `setTimeout` - 用于设置定时器,在指定时间后执行函数。 - **选项E**: `alert` - 用于弹出警告框显示消息。 因此,所有选项均正确。 ###...

    用JavaScript技术为制作动态鼠标指针

    ### 使用JavaScript技术制作动态鼠标指针 #### 一、引言 随着网页设计与用户体验的不断进步,开发者们越来越注重细节上的创新与个性化定制。在众多网页特效中,动态鼠标指针不仅能够提升用户交互体验,还能增强网站...

    javascript中setTimeout使用指南

    这种写法在现代JavaScript开发中是不推荐的,因为它使用了eval来执行字符串,这可能导致安全问题和性能下降。通常情况下,应当优先考虑使用函数引用的方式。 第二种方法,是使用函数引用调用setTimeout函数。这种...

    java开始面试的第49天.doc

    5. `eval()`:这是一个危险的函数,因为它可以执行传入的字符串作为JavaScript代码。在大多数情况下,应当避免使用 `eval()`,因为它可能导致安全问题。 【arguments对象】 在JavaScript函数中,`arguments` 对象...

    定时器(setTimeout/setInterval)调用带参函数失效解决方法

    在JavaScript编程中,`setTimeout`和`setInterval`是两个非常重要的定时器函数,它们用于在特定的时间间隔后执行特定的代码。然而,当尝试使用它们来调用带有参数的函数时,可能会遇到一些问题。本文将深入探讨这两...

    浅谈JavaScript超时调用和间歇调用

    关于setInterval函数,值得注意的是,如果传入的代码是一个字符串,它会通过eval函数来执行这个字符串。然而,推荐的做法是直接传入一个函数。因为传入字符串可能会带来安全风险,另外,字符串的性能开销比函数要大...

    jQuery防止click双击多次提交及传递动态函数或多参数

    在`click`事件中,使用`setTimeout`和`clearTimeout`来控制事件的触发频率,并在定时器的回调函数中使用`eval`执行传入的函数。 在使用`eval`时,需要注意安全性问题。虽然`eval`可以执行字符串形式的JavaScript...

    javascript+iframe 实现无刷新载入整页的代码

    最后,文档中指出虽然示例DEMO可以正常工作,但是在查看页面源代码时无法看到被载入页面的内容,这可能是通过分析页面头部信息并动态地将其添加到主页面的头部实现的,类似于使用`eval()`函数来执行JavaScript代码。...

    曲线图例子

    然而,`eval`函数在某些情况下可能存在安全风险,因为它可以执行任何JavaScript代码,因此在实际开发中,应谨慎使用。 为了绘制曲线图,开发者通常会使用数据可视化库,如D3.js、ECharts、Highcharts等。这些库提供...

    js函数setTimeout延迟执行的简单介绍

    如果是字符串,会作为`eval`函数的参数来执行。但推荐使用函数引用,因为字符串方式可能会引入安全问题和性能损耗。 - `delay`:这是一个整数值,表示延迟执行的时间,单位为毫秒。例如,`1000`毫秒即代表1秒。 ...

    延时重复执行函数 lLoopRun.js

    首先,它会根据传入的参数设置内部变量。然后,通过`setInterval`方法启动一个定时器,该定时器会周期性地调用`_doLoop`方法。在`_doLoop`方法中,程序会检查`stopString`是否为真,如果是,则清除定时器并停止执行...

    原生js仿jquery一些常用方法(必看篇)

    与jQuery不同的是,这里使用了`eval`函数来动态访问和设置属性,但在实际开发中应尽量避免使用`eval`,因为它会带来安全风险。 `val()`方法用于处理输入框元素的值。它与`attr()`方法类似,根据参数的数量决定是...

    ThinkPHP结合ajax、Mysql实现的客户端通信功能代码示例

    通过ThinkPHP的输入过滤器I('get.data_id')和I('get.lasttime')获取传入的参数,然后根据这些参数执行SQL查询。查询的SQL语句会从数据库中检索数据,并根据lasttime参数筛选出最新的记录。之后,将查询结果以数组...

Global site tag (gtag.js) - Google Analytics