setTimeout()的第一個參數可以作為字符串傳入。字符串會在指定的超時時間或間隔之后進行求值(相當于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();想必大家應該很清楚我的意思了,eval執行和new Function執行,我發現是構造函數才和原代碼是一致的。所以第一反應是否這本書出錯了?但是我想經得起考究的書不應該錯,那可能是我錯了,那么想請各位大神幫我解決下這本書這個形容是否有問題。
javascript權威指南中對setTimeout()傳入字符串參數的描述是否正確?
arlenhui
2015-05-30 15:51:13