模板文字对我来说有点像eval,并且经常被引用使用eval是一个坏主意.
我不关心模板文字的性能,但我担心注入攻击(以及我可能没有想到的其他安全问题).
编辑
let ii = 1;
function counter() {
return ii++;
}
console.log(`${counter()}, ${ii++}, ${counter()}`);
Run Code Online (Sandbox Code Playgroud)
哪个输出
1,2,3
模板文字在全球范围内产生副作用.既可以通过功能,也可以直接使用.
编辑2
let ii = 1;
let inc = function() { ii++; }
console.log('Starting: ' + ii);
let input = prompt('Input something evil (suggestion: inc() or ii++)');
console.log(`You input: ${input}`);
console.log('After template literal: ' + ii);
eval(input);
console.log('After eval: ' + ii);
Run Code Online (Sandbox Code Playgroud)
如果ii++在提示时输入,则会记录
开始:1
您输入:ii + = 1
模板文字后:1
评估后:2
编辑3
我已经开始研究ECMAScript规范了
假设我已经创建了一个ES6生成器
function *createFibonacciIterator(a = 0, b = 1) {
yield b;
yield *createFib(b, b + a); // <== QUESTION IS ABOUT THIS LINE
}
Run Code Online (Sandbox Code Playgroud)
然后我使用该生成器获得前20个结果
let fibber = createFibonacciIterator();
for (let ii = 0; ii < 20; ii++) {
console.log(fibber.next());
}
Run Code Online (Sandbox Code Playgroud)
如果我离开*了的yield *createFib(b, b + a);线的东西打破,这是有道理的,因为我不希望产生一个迭代器,但实际价值.
*发电机的技术含义是什么?
*首次运行和清除本地数据似乎具有相同的结果
我认为Cordova在第一次运行时构建了一个缓存
launch-screen包已删除(如流星论坛中所述)crosswalk 包括/排除(虽然我更喜欢包括Crosswalk的兼容性)ecmascript-6 ×2
javascript ×2
android ×1
cordova ×1
crosswalk ×1
eval ×1
generator ×1
iterator ×1
meteor ×1
yield ×1