一个困扰我很久的js问题,问题是这样的:function aa(){alert("aa")\x05}\x05setInterval("aa()",5000)/*这是一个间的测试函数,可以正常运行,但是我把它放到另一个函数中就不能运行 了*/function test(){function a

来源:学生作业帮助网 编辑:作业帮 时间:2024/11/23 20:33:13
一个困扰我很久的js问题,问题是这样的:function aa(){alert(
xTNA}╘p5;fb1hj""؈1Ȃ\~V^ fgje&;sΌgmR/qIbM"w2enHF,)xS`ii7qŻ)燯  [vN sna8kowr9l 8~\aU}Z H@#;;";,7qn! 7[Hݣ!9P/23 xqwfճ+FlnMKO/-s^+yIXopC} uenn@-Unk. }L\/E kp絲%6MOX ڂ?_|Z" eF{[AZ' |}+9 KH+ꅊti$vAx. `ZH۫^a^RMO4jO7d)kLb/Pke+lFxRr`);U!K$rOen5F"p\H`QK,f 7#0(q-hP),ϑGky3ꨋI6;cF#6mHÚ(!'.bn ܊/ f0vC\w,:8|M*v<<6z@#n4fn[;W0KNҪ5N<>KϫVLQw7vu lE6{Ȣo`3#TÅNfha93{F*Ke򯉾v\%

一个困扰我很久的js问题,问题是这样的:function aa(){alert("aa")\x05}\x05setInterval("aa()",5000)/*这是一个间的测试函数,可以正常运行,但是我把它放到另一个函数中就不能运行 了*/function test(){function a
一个困扰我很久的js问题,
问题是这样的:
function aa(){
alert("aa")
\x05}
\x05setInterval("aa()",5000)/*这是一个间的测试函数,可以正常运行,但是我把它放到另一个函数中就不能运行 了*/
function test(){
function aa(){
alert("aa")
}
setInterval("aa()",5000)
\x05
}
test() //为什么这样就不能运行了?按理说下面的可以运行,这个应该也可以运行啊
function test(){
function aa(){
alert("aa")
}
setInterval(aa,5000)
}
test() //这样又可以正常运行了

一个困扰我很久的js问题,问题是这样的:function aa(){alert("aa")\x05}\x05setInterval("aa()",5000)/*这是一个间的测试函数,可以正常运行,但是我把它放到另一个函数中就不能运行 了*/function test(){function a
这个要从setInterval函数的工作原理说起,相信你知道setInterval是有两个必须参数的,一个是代码,一个是时间间隔.
但是js有个重要的特性就是参数类型的灵活性,所以其实这里的setInterval的第一个参数‘代码’可以是两种,一个就是一个Function对象,就是上面的setInterval(aa,5000);另外一种就是代码串,以字符串表现,就是上面的setInterval("aa()",5000).
显然问题出现在第二种情形,问题的关键在于第二种情形的时候setInterval的执行机制:既然第二种情况传进去的代码是字符串,显然需要一种机制将其转化为js代码,而js中将字符串转为代码的方式有两种一个是eval函数,一个是Function类,setInterval使用的是Function类来执行相关的代码,那么setInterval("aa()",5000)就相当于var f = new Function("aa()");setInterval(f);但是这里Function类生成js代码的作用于都是全局的,在浏览器来讲就是window对象,而在window对象下面并没有aa这个函数(aa是test函数局部域的局部变量),所以出现错误.