第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

javascript權(quán)威指南中對setTimeout()傳入字符串參數(shù)的描述是否正確?

javascript權(quán)威指南中對setTimeout()傳入字符串參數(shù)的描述是否正確?

arlenhui 2015-05-30 15:51:13
setTimeout()的第一個參數(shù)可以作為字符串傳入。字符串會在指定的超時時間或間隔之后進行求值(相當于eval)。其中相當于eval這種描述正確嗎?我們先看一個例子var?name?=?"Bob";? var?nameObj?={? ????name?:?"Tom",? ????showName?:?function(){? ????????alert(this.name);? ????},? ????waitShowName?:?function(){ ????????var?that?=?this; ????????setTimeout("that.showName();",?1000);? ????} }; nameObj.waitShowName();然后與下面兩個進行對比var?name?=?"Bob";? var?nameObj?={? ????name?:?"Tom",? ????showName?:?function(){? ????????alert(this.name);? ????},? ????waitShowName?:?function(){ ????????var?that?=?this; ????????eval("console.log(that)");? ????} }; nameObj.waitShowName();var?name?=?"Bob";? var?nameObj?={? ????name?:?"Tom",? ????showName?:?function(){? ????????alert(this.name);? ????},? ????waitShowName?:?function(){ ????????var?that?=?this; ????????(new?Function("console.log(that)"))()? ????} }; nameObj.waitShowName();想必大家應(yīng)該很清楚我的意思了,eval執(zhí)行和new Function執(zhí)行,我發(fā)現(xiàn)是構(gòu)造函數(shù)才和原代碼是一致的。所以第一反應(yīng)是否這本書出錯了?但是我想經(jīng)得起考究的書不應(yīng)該錯,那可能是我錯了,那么想請各位大神幫我解決下這本書這個形容是否有問題。
查看完整描述

4 回答

已采納
?
幻_影

TA貢獻2條經(jīng)驗 獲得超0個贊

setTimeout和setInterval確實是把第一個參數(shù)的上下文環(huán)境變成全局作用域了,內(nèi)部為何這樣我也不清楚,感興趣你可以去看下es標準,要是想改變函數(shù)指針,可以用apply

查看完整回答
反對 回復(fù) 2015-05-31
?
風(fēng)蕭蕭夢瀟瀟

TA貢獻2條經(jīng)驗 獲得超0個贊

應(yīng)該沒有問題,setTimeout()在第一個參數(shù)為字符串時上下文為全局作用域,相當于全局作用域的eval。

查看完整回答
反對 回復(fù) 2017-04-29
?
幻_影

TA貢獻2條經(jīng)驗 獲得超0個贊

setInterval第一個參數(shù)如果是字符串的話就是按照eval解析的,傳遞的是函數(shù)指針,eval最好不用是出于安全方面的考慮,因為有可能會執(zhí)行到非安全的惡意代碼,如果你就是喜歡用的話,隨你高興

查看完整回答
反對 回復(fù) 2015-05-30
  • arlenhui
    arlenhui
    我知道出于安全最好不要用,但是應(yīng)該有不可避免的情況要用吧。 我納悶的是按照eval解析,作用域卻改變了,導(dǎo)致和that處在不同環(huán)境中無法調(diào)用。
  • arlenhui
    arlenhui
    是因為在瀏覽器中setTimeout、setInterval和匿名函數(shù)執(zhí)行時的當前對象是全局對象window的原因嗎?參數(shù)傳遞過去是用eval解析,但是卻因為setTimeout函數(shù)改變了作用域?
?
Mery丶Louis

TA貢獻2條經(jīng)驗 獲得超0個贊

eval里面能執(zhí)行函數(shù),別用eval

查看完整回答
反對 回復(fù) 2015-05-30
  • arlenhui
    arlenhui
    eval里面創(chuàng)建函數(shù)后,執(zhí)行環(huán)境仍然是當前執(zhí)行環(huán)境。而Function構(gòu)造器構(gòu)造的函數(shù),由于沒有對象會默認為window。我就是想知道setTimeout里面?zhèn)魅胱址?,setTimeout里面執(zhí)行的情況到底是怎么樣的。犀牛書是說歷史原因,或許是js這門語言編寫出來就沒發(fā)現(xiàn)到這個點,到現(xiàn)在ES6也沒有解決。你可以說說怎么回事嗎
  • arlenhui
    arlenhui
    另外IE6.7在處理json字符串時還是用到eval吧,你的說法不成立
  • 4 回答
  • 0 關(guān)注
  • 2552 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號