奇怪的js eval /模板字符串行为

时间:2017-10-03 07:54:37

标签: javascript ecmascript-6 eval template-strings

尝试在stackoverflow中回答问题,我在Chrome控制台中进行了一些测试,发现以下情况我无法理解。



var vals = ['x','y','z'];
vals.forEach(val => { eval(`var ${val} = 1; console.log('${val} = ', ${val})`);});




当我引用$ {val}作为" vals"中定义的val时,javascript如何知道?数组,当我引用它已存储该数组中的每个值的值时?

我的意思是,为什么它不记录:

x = x;

y = y;

z = z;

1 = 1;

1 = 1;

1 = 1;

1 个答案:

答案 0 :(得分:3)

eval的上下文之外,首先评估模板字符串。所以你已经有效地完成了:

eval("var x = 1; console.log('x = ', x)");
eval("var y = 1; console.log('y = ', y)");
eval("var z = 1; console.log('z = ', z)");

当然只是打印每个变量及其值。

当像这样使用eval时,用console.log替换它以查看实际发送到调用的字符串是有用的:

var vals = ['x','y','z'];
vals.forEach(val => { console.log('eval string:', `var ${val} = 1; console.log('${val} = ', ${val})`);});