window.onload=function(){
?function?fun(str){
??alert(str)
?}
?setInterval("fun('hello?world')",3000)
?}這樣肯定是執(zhí)行不了的,因為setInterval第一個參數(shù)在這里加雙引號意思差不多就是可執(zhí)行代碼,執(zhí)行環(huán)境就是window,不是在onload方法下,所以fun是not defined。改成這樣就好了window.onload=function(){
?function?fun(str){
??alert(str)
?}
?setInterval(fun,3000,'hello?world');
}這里fun沒加雙引號,它就代表函數(shù),所以運行ok,拿出window.onload外就不行了,這是因為js的作用域鏈內(nèi)部訪問外部(其上層),外部不能訪問內(nèi)部!但是window.onload=function(){
?function?fun(str){
??alert(str)
?}
?eval("fun('hello?world')")
}但是這個就能執(zhí)行,我這回有點不明白了,同樣參數(shù)加引號都是可執(zhí)行代碼,為什么setInterval和eva都是內(nèi)置函數(shù)會有這樣的差別?為什么此時setInterval的執(zhí)行環(huán)境非要強制為window?
setInterval執(zhí)行環(huán)境的問題,求高手解答!
winner4265975
2017-03-19 14:51:43