今天我遇到了一個奇怪的錯誤。javascript eval上下文不包含參數chrome
當我調用鉻下面的函數,我得到:
var t = function(i){console.log(i);console.log(eval("i"));};
t("123");
//the result in chrome
123
undefined
,但在Firefox調用上面的代碼,就出來了,就像我想:第二個日誌聲明是一樣的第一。
在我看來,eval語句將使用匿名函數的上下文作爲其運行時上下文,其中包含參數。
我沒有發現任何涉及eval上下文和參數的內容。
有誰能告訴我爲什麼?
其實,我用tempo.js來呈現html,並出現了類似的問題,因爲我上面列出。
的源代碼是在這裏:
_replaceVariables: function (renderer, _tempo, i, str) {
return str.replace(this.varRegex, function (match, variable, args) {
try {
...
if (variable === '.') {
val = eval('i');
} else if (utils.typeOf(i) === 'array') {
val = eval('i' + variable);
} else {
val = eval('i.' + variable);
}
.....
} catch (err) {
console.log(err);
}
return '';
});
},
當鉻運行,eval語句遇到錯誤這樣的:
TypeError: Cannot convert null to object
我想不通爲什麼會這樣,所以我嘗試在開始的代碼。
看起來像chrome eval函數只執行代碼,而不是返回值。在chrome和firefox中嘗試eval(「console.log(i)」) – Eugene 2013-05-08 15:59:37
@Eugene它實際上返回值,這是我的錯誤。謝謝。 – simplemx 2013-05-08 16:39:58