为了账号安全,请及时绑定邮箱和手机立即绑定

函数内定义的对象,为什么在全局范围内也能访问?

函数内定义的对象,为什么在全局范围内也能访问?

料青山看我应如是 2018-09-06 09:09:32
为什么在全局范围内也能使用res?var counter = (function(){    var res = {};    var _name = 'test';     res.getName = function(){return _name;};     res.setName = function(name){_name=name;};    //return res     return res; })();
查看完整描述

1 回答

?
倚天杖

TA贡献1828条经验 获得超3个赞

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,而是countercounter等于res,对你造成的表象是全局能访问res


查看完整回答
反对 回复 2018-10-06
  • 1 回答
  • 0 关注
  • 567 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信