呵呵!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构造函数这么奇葩,实际应用会很少啦。。。。况且,可能还会影响性能。

转载于:https://www.cnblogs.com/linweinb/p/8567997.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值