我今天遇到了一个奇怪的错误。
当我在 chrome 中调用以下函数时,我得到了:
var t = function(i){console.log(i);console.log(eval("i"));};
t("123");
//chrome的结果
123
不明确的
但是上面的代码在firefox中调用,结果和我想的一样:第二条log语句和第一条一样。
在我看来,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 '';
});
},
在 chrome 中运行时,eval 语句出现如下错误:
TypeError:无法将 null 转换为对象
我不知道为什么会这样,所以我一开始就尝试了代码。