我刚刚浏览了timer.js HERE 的代码。并遇到以下几行代码:
var paramList = ['autostart', 'time'];
for (var arg in paramList) {
if (func[paramList[arg]] != undefined) {
eval(paramList[arg] + " = func[paramList[arg]]");
}
};
在源代码中它的所有内容都在一行上,但我上面的内容更具可读性,我的难点在于使用eval
,I.E。以下代码行:
eval(paramList[arg] + " = func[paramList[arg]]");
现在,如果我在chrome中添加一个断点到上面一行并转到控制台并粘贴代码行,我会得到以下内容:
true
为什么?让我们再看一下这句话:
eval(paramList[arg] + " = func[paramList[arg]]");
+
在这做什么?将paramList[arg]
转换为字符串,在这种情况下使用eval如下:
eval("paramList[arg] = func[paramList[arg]]");
?
或加号是否用于连接目的? (我认为这不太可能!)
我已阅读 MDN eval() ,但仍有疑问。
有人可以解释一下这个陈述的细分吗?
谢谢。
答案 0 :(得分:4)
eval
需要一个字符串。你有什么:
eval(paramList[arg] + " = func[paramList[arg]]");
+
只是字符串连接。
相当于:
var code = paramList[arg] + " = func[paramList[arg]]"
eval(code);
所以我说它应该等同于:
global[paramList[arg]] = func[paramList[arg]];
或者,在此特定示例中(使用var paramList = ['autostart', 'time'];)
):
if (func['autostart'] != undefined)
autostart = func['autostart'];
if (func['time'] != undefined)
time = func['autostart'];