为什么可以访问“;什么是关闭;
Why can access the variable in "what-I-think-is-a-closure"?
我有这样的代码:(在jsfiddle上http://jsfiddle.net/k6zNm/3/)
(function(){
Marker = function(opts){
var marker = this;
marker.Version = "2012.Jul.06";
marker.HelloWorld = function(){
return marker.Version;
}
}
})();
window.mymarker = new Marker();
$("div#message").text(mymarker.HelloWorld());
代码运行良好。但我认为(function(){})();
是一个闭包。为什么我可以访问其中的Marker
。这不是对全局命名空间的污染吗?
您没有将var
与Marker
一起使用,因此它是一个全局变量,而不是作用域到函数。
您的代码不是闭包。闭包如下所示,您需要返回函数out,注意变量version
不在您返回的函数范围内。
var Marker = (function(){
var version = "2012.Jul.06";
return function(opts){
var marker = this;
marker.Version = version;
marker.HelloWorld = function(){
return marker.Version;
};
};
})();
您可以访问Marker
只是因为它是代码中的全局变量。
因为您没有将var
放在Marker前面,所以它是在全局级别创建的。
闭包只是上层作用域。例如:
( function() {
var i = 0;
( function() {
// i is in the closure, the upper scope
} () );
} () );
不要忘记javascript的唯一作用域是函数作用域。
(function(){})();
是一个立即调用的函数表达式。
但是,对你的例子来说,问题只是你错过了var
,所以Marker
是一个全局变量。
相关文章:
- 用户单击带有哈希值的链接以访问该页面,如果禁用Javascript会发生什么情况
- 双括号在javascript中意味着什么以及如何访问它们
- 通过它访问HTML元素's id DIRECTLY-这里发生了什么
- 可以'无论我做什么,都无法访问函数外的数组
- 访问javascript对象的属性返回undefined,原因是什么
- 为什么可以访问“;什么是关闭;
- 存在什么库来提供跨浏览器 DOM 访问
- 我需要做什么才能访问控制器中的全局数据
- 在没有服务器根访问权限的情况下构建聊天脚本的有效方法是什么
- Angular 什么是在 ng-repeat 指令中访问总对象的最佳方式
- Javascript中最快的类/对象访问/实例化是什么
- 从 JavaScript 访问元素的 CSS 样式属性的正确方法是什么?
- 在 Javascript 中访问控制器变量的最佳方法是什么?
- 匿名函数在Javascript(Node)中具有什么访问权限
- 在 Backbone 中.js事件回调这是什么,以及如何访问触发的元素
- 访问它外部的回调函数参数的简单方法是什么
- CouchDB:访问_design视图或提取文档字段的替代方法是什么
- 使用'[ ]'表示法而不是点表示法来访问javascript对象成员的原因是什么?
- 注册应用程序以访问优步 API 时,源 URI 应该是什么
- 检查客户端是否可以访问资源的 RESTful 方法是什么?