javascript - 函数内定义的对象,为什么在全局范围内也能访问?
本文介绍了javascript - 函数内定义的对象,为什么在全局范围内也能访问?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
为什么在全局范围内也能使用res?
var counter = (function(){
var res = {};
var _name = 'test';
res.getName = function(){return _name;};
res.setName = function(name){_name=name;};
//return res
return res;
})();
解决方案
var counter = (function(){
var res = {};
var _name = 'test';
res.getName = function(){return _name;};
res.setName = function(name){_name=name;};
//return res
return res;
})();
console.log(res); // 报错,Uncaught ReferenceError: res is not defined(…)
console.log(counter); // {}
1.作用域,counter
在全局声明,res
在匿名函数声明,根据作用域
你在全局中一定能访问counter
,但是不能访问res
2.闭包,赋值操作使得counter
保持了对res
的引用,所以res
一直存在于内存中,counter
的值就是res
的值
综上你在全局能访问的不是res
,而是counter
,counter
等于res
,对你造成的表象是全局能访问res
。
这篇关于javascript - 函数内定义的对象,为什么在全局范围内也能访问?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文