日期:2014-05-16  浏览次数:20370 次

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里面的闭包问题 我还是不是很明白 所以有待以后再去深入了。
?

?