javascript - js访问函数作用域外部同名变量
本文介绍了javascript - js访问函数作用域外部同名变量的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
(function(){
var A = 20;
function canReadA(){
console.log(A);
}
function cannotReadA(){
if(false){
var A = 10;
}
console.log(A);
}
canReadA();
cannotReadA();
}());
有什么办法能够在cannotReadA()中访问到A=20的那个变量?除了换一个变量名,或者声明一个外部的命名空间,还有什么方法能够直接做到?比如能不能在当前作用函数域中把这个变量的存在取消掉?
解决方案
(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();
}());
这篇关于javascript - js访问函数作用域外部同名变量的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文