• 呵呵!Function构造函数


    今天准备吐槽一下Function构造函数。

    我们知道,不管是函数声明还是函数表达式都是基于词法作用域的,明白这点在闭包中十分重要,譬如:

    var a='global';
    function foo(){
        var a='local';
        return function(){
             console.log(a);
        } 
    }
    foo()();   // local

    根据词法作用域规则,函数所能访问的变量取决于它声明的位置,以上面的例子,函数沿作用域链查找,找到第一个变量a就停止查找(即找到局部变量a就停止查找,并不会继续查找全局变量a),所以理所当然输出'local',即局部变量a的值。

    但是!但是比较奇葩的是,Function构造函数并不是基于词法作用域的,它向往的是全局作用域(傲娇。。。):

    var a='global';
    function foo(){
        var a='local';
        return new Function('console.log(a)');
    }
    
    foo()();    // global

    你看,它输出的是全局的a值。

    哎,实际上你可以把Function构造函数看成全局作用域运行的eval(),不过,既然Function构造函数这么奇葩,实际应用会很少啦。。。。况且,可能还会影响性能。

  • 相关阅读:
    [摘]MongoDB范围查询的索引优化
    python ftp 暴破
    写mongodb日志
    [转]使用 Python 实现跨平台的安装程序
    HDOJ 1008 Elevator
    第一个数字
    反转串
    HDOJ 1108 最小公倍数
    HDOJ 1096 A+B for InputOutput Practice (VIII)
    报数游戏
  • 原文地址:https://www.cnblogs.com/linweinb/p/8567997.html
Copyright © 2020-2023  润新知