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

Javascript 奇怪的js eval/模板字符串行为,javascript,ecmascript-6,eval,template-strings,Javascript,Ecmascript 6,Eval,Template Strings,为了回答stackoverflow中的一个问题,我在我的chrome控制台中进行了一些测试,发现下面的例子我无法理解 var-vals=['x','y','z']; forEach(val=>{eval(`var${val}=1;console.log('${val}=',${val})`;})首先在评估的上下文之外评估模板字符串。因此,你已经有效地做到了: eval("var x = 1; console.log('x = ', x)"); eval("var y = 1; console.

为了回答stackoverflow中的一个问题,我在我的chrome控制台中进行了一些测试,发现下面的例子我无法理解

var-vals=['x','y','z'];

forEach(val=>{eval(`var${val}=1;console.log('${val}=',${val})`;})首先在
评估的上下文之外评估模板字符串。因此,你已经有效地做到了:

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'];
forEach(val=>{console.log('eval string:','var${val}=1;console.log('${val}=',${val})`;})