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

为什么在全局范围内也能使用res?

var counter = (function(){    var res = {};    var _name = 'test';
    res.getName = function(){return _name;};
    res.setName = function(name){_name=name;};    //return res
    return res;
})();


料青山看我应如是
浏览 568回答 1
1回答

倚天杖

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,但是不能访问res2.闭包,赋值操作使得counter保持了对res的引用,所以res一直存在于内存中,counter的值就是res的值综上你在全局能访问的不是res,而是counter,counter等于res,对你造成的表象是全局能访问res。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript