(function(){
var A = 20;
function canReadA(){
console.log(A);
}
function cannotReadA(){
if(false){
var A = 10;
}
console.log(A);
}
canReadA();
cannotReadA();}());有什么办法能够在cannotReadA()中访问到A=20的那个变量?除了换一个变量名,或者声明一个外部的命名空间,还有什么方法能够直接做到?比如能不能在当前作用函数域中把这个变量的存在取消掉?
1 回答

收到一只叮咚
TA贡献1821条经验 获得超4个赞
(function(){ var A = 20; var getOuterA = function(){ return A; }; var setOuterA = function(newVal){ A = newVal; }; function canReadA(){ console.log(A); } function cannotReadA(){ if(false){ var A = 10; } //console.log(A); console.log(getOuterA()); setOuterA(5); console.log(getOuterA()); } canReadA(); cannotReadA();}());
请借助函数访问,切不可用另一个回答中的this.A=A;方法,这样会创建一个全局的A变量,而且在strict模式下是会报错的。随意地创建全局变量,是很不负责、危险的行为。
再更新一个更舒服的方法
(function(){ var A = 20; //使用es5的 getter/setter var outerScope = { get A(){ return A; }, set A(val){ A = val; } }; function canReadA(){ console.log(A); } function cannotReadA(){ if(false){ var A = 10; } //console.log(A); console.log(outerScope.A); outerScope.A = 5; console.log(outerScope.A); } canReadA(); cannotReadA();}());
添加回答
举报
0/150
提交
取消