美文网首页
避免使用eval及with

避免使用eval及with

作者: Ronswhite | 来源:发表于2019-06-10 11:46 被阅读0次

    JavaScript中有两个可以破坏作用域的函数eval和with

    eval

    function foo(str, a) {
        eval(str);
        console.log(a, b);
    }
    
    var b = 3;
    
    foo("b = 2", 1); // 1 2
    

    上面代码运行后直接会修改全局作用域中b的值,破坏代码作用域。

    with

    var obj = {a:1};
    
    with(obj) {
        a = 6;
        b = 2;
    }
    console.log(obj.a); //6
    console.log(obj.b); //undefined
    console.log(b);//2
    

    上面代码执行到b = 2时,引擎会执行LHS查询,在全局作用域中创建变量b,破坏代码作用域。

    eval和with不仅仅会破坏作用域,而且还给程序优化带来不便。

    由于引擎在编译阶段无法确定传给eval的参数是什么,也无法确定传给with的对象的内容。所以引擎无法优化代码。
    最差的情况将会导致其他优化无意义,使得引擎完全不做任何优化。

    相关文章

      网友评论

          本文标题:避免使用eval及with

          本文链接:https://www.haomeiwen.com/subject/gjgaxctx.html