Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/237.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript使用eval创建与PHP压缩函数等效的函数_Javascript_Php_Eval - Fatal编程技术网

JavaScript使用eval创建与PHP压缩函数等效的函数

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

我已经看到了一些关于用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 = '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$$2
compact('i','key','value','obj','arguments')
不起作用。ES6为此提供了一个内置的int解决方案:短对象表示法:
console.log({a,b})
。关于内部变量的观点很好,但我们仍然可以通过使用eval创建紧凑函数本身并为内部变量提供神秘名称来解决这一问题,但对于“参数”和“此”我们无能为力。当然,现在使用ES6 transplier并不是更好。另一个问题是,当最小化时,此代码将中断d、 想想看,我也不确定ES6速记如何与minificaion配合使用。