Open mileOfSunshine opened 5 years ago
该函数可以将任意字符串当作一个Javascript代码执行。如果一定需要使用eval(),那么可以考虑使用new Function()来替换eval()。
安全隐患:可能执行被篡改过的代码。 避免自动成为全局变量:将eval()调用封装在一个即使(立即执行)函数中。
new Function 与 eval() 区别:
(function() {
var local = 1
eval('local = 3; console.log(local)') // => 3
console.log(local) // => 3
}())
(function() {
var local = 1
Function('console.log(typeof local);')(); // => undefined
}())
避免在调用构造函数时忘记使用 new
操作符带来的问题。
// 通用方法
if (!(this instanceof arguments.callee)) {
return new arguments.callee()
}
// 示例
function Person() {
if (!(this instanceof arguments.callee)) {
return new arguments.callee()
}
}
第一章