JavaScript使用eval创建与PHP压缩函数等效的函数
我已经看到了一些关于用JavaScript复制PHP的compact函数的问题,答案是如果VAR不在全局范围内就不可能,或者不建议使用eval 我试着给eval一次机会,它似乎奏效了 除了compact函数不能在您试图压缩的vars范围之外声明之外,下面的问题是什么JavaScript使用eval创建与PHP压缩函数等效的函数,javascript,php,eval,Javascript,Php,Eval,我已经看到了一些关于用JavaScript复制PHP的compact函数的问题,答案是如果VAR不在全局范围内就不可能,或者不建议使用eval 我试着给eval一次机会,它似乎奏效了 除了compact函数不能在您试图压缩的vars范围之外声明之外,下面的问题是什么 function somefunc() { // in compact func, eval will run eval('a') and not eval(a) so this is safe var a = 'a
function somefunc() {
// in compact func, eval will run eval('a') and not eval(a) so this is safe
var a = 'alert("this will not run")',
b = 'bbb';
var compact = function() {
var obj = {};
for (var i = 0; i < arguments.length; i++) {
var key = arguments[i];
var value = eval(key);
obj[key] = value;
}
return obj;
}
console.log(compact('a', 'b')) // {a: "alert("this will not run")", b: "bbb"}
}
somefunc();
函数somefunc(){
//在compact func中,eval将运行eval('a'),而不是eval(a),因此这是安全的
变量a='警报(“此操作将不会运行”),
b=‘bbb’;
var compact=function(){
var obj={};
for(var i=0;i
上述内部变量冲突和范围问题的解决方法
function somefunc() {
// in compact func, eval will run eval('a') and not eval(a) so this is safe
var a = 'alert("this will not run")',
b = 'bbb';
var compact = eval("(function(){for(var ___$$$1={},___$$$2=0;___$$$2<arguments.length;___$$$2++){var ___$$$3=arguments[___$$$2],___$$$4=eval(___$$$3);___$$$1[___$$$3]=___$$$4}return ___$$$1})");
console.log(compact('a', 'b')) // {a: "alert("this will not run")", b: "bbb"}
}
somefunc();
函数somefunc(){
//在compact func中,eval将运行eval('a'),而不是eval(a),因此这是安全的
变量a='警报(“此操作将不会运行”),
b=‘bbb’;
var compact=eval(((function(){for(var{uuuuuuuu$$1={},{uuuuuuuuu$$2=0;{uuuuuuuuu$$2compact('i','key','value','obj','arguments')
不起作用。ES6为此提供了一个内置的int解决方案:短对象表示法:console.log({a,b})
。关于内部变量的观点很好,但我们仍然可以通过使用eval创建紧凑函数本身并为内部变量提供神秘名称来解决这一问题,但对于“参数”和“此”我们无能为力。当然,现在使用ES6 transplier并不是更好。另一个问题是,当最小化时,此代码将中断d、 想想看,我也不确定ES6速记如何与minificaion配合使用。