setInterval执行环境的问题,求高手解答!

window.onload=function(){
 function fun(str){
  alert(str)
 }
 setInterval("fun('hello world')",3000)
 }

这样肯定是执行不了的,因为setInterval第一个参数在这里加双引号意思差不多就是可执行代码,执行环境就是window,不是在onload方法下,所以fun是not defined。

改成这样就好了

window.onload=function(){
 function fun(str){
  alert(str)
 }
 setInterval(fun,3000,'hello world');
}

这里fun没加双引号,它就代表函数,所以运行ok,拿出window.onload外就不行了,这是因为js的作用域链内部访问外部(其上层),外部不能访问内部!

但是

window.onload=function(){
 function fun(str){
  alert(str)
 }
 eval("fun('hello world')")
}

但是这个就能执行,我这回有点不明白了,同样参数加引号都是可执行代码,为什么setInterval和eva都是内置函数会有这样的差别?为什么此时setInterval的执行环境非要强制为window?

winner4265975
浏览 1629回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript