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?
相关分类