今天翻看JS代码时候遇到以下一段,感觉有点意思,思考一番记录下来,以便日后学习。

    var mt = false;
    function change(a) {
        eval(`${a} = ${a} ? false: true`);
        if (a == 'mt') {
            eval(a) ? method1() :method2();
        }
    }
    change('mt');
  1. 首先执行change方法,传入参数 mt,此时第一句eval("${a} = ${a} ? false: true"); 相当于 mt = mt ? false: true。因为开头var mt = false,所以第一句执行下来,此时 mt = true
  2. 因为传入参数mt,所以此时a == 'mt'成立。eval(a) ? method1() :method2(); 相当于 mt ? method1() :method2();,因为此时 mt = true,所以最后执行method1()。

这段代码巧妙的运用的eval()函数:

eval() 函数可计算某个字符串,并执行其中的的 JavaScript 代码。

W3school :JavaScript eval() 函数

发表评论