高品质网站欣赏,百度广告投放价格,高端品牌网站建设,自有品牌如何推广今天准备吐槽一下Function构造函数。 我们知道#xff0c;不管是函数声明还是函数表达式都是基于词法作用域的#xff0c;明白这点在闭包中十分重要#xff0c;譬如#xff1a; var aglobal;
function foo(){var alocal;return function(){console.log(a);}
}
foo()(); …今天准备吐槽一下Function构造函数。 我们知道不管是函数声明还是函数表达式都是基于词法作用域的明白这点在闭包中十分重要譬如 var aglobal;
function foo(){var alocal;return function(){console.log(a);}
}
foo()(); // local 根据词法作用域规则函数所能访问的变量取决于它声明的位置以上面的例子函数沿作用域链查找找到第一个变量a就停止查找即找到局部变量a就停止查找并不会继续查找全局变量a所以理所当然输出local即局部变量a的值。 但是但是比较奇葩的是Function构造函数并不是基于词法作用域的它向往的是全局作用域傲娇。。。: var aglobal;
function foo(){var alocal;return new Function(console.log(a));
}foo()(); // global 你看它输出的是全局的a值。 哎实际上你可以把Function构造函数看成全局作用域运行的eval()不过既然Function构造函数这么奇葩实际应用会很少啦。。。。况且可能还会影响性能。转载于:https://www.cnblogs.com/linweinb/p/8567997.html