【发布时间】:2013-05-08 15:56:23
【问题描述】:
我今天遇到了一个奇怪的错误。
当我在 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 转换为对象
我不知道为什么会这样,所以我一开始就尝试了代码。
【问题讨论】:
-
看起来 chrome eval 函数只执行代码,不返回值。在 chrome 和 firefox 中尝试 eval("console.log(i)")
-
@Eugene 它实际上返回值,这是我的错误。谢谢。
标签: javascript parameters eval