5 楼:{ var tmp = 2 } JS 中语句块不能独立作用域,这样写等同于声明了一个全局变量 tmp = 2,所以不存在该语句块内代码执行完毕后 tmp 就被销毁的情况。

6 楼:

变量 add,以及 add 的 count 属性、plus() 方法都是公共的,这意味着其他代码可以直接修改你的 count 属性,造成不必要的麻烦。

闭包要解决的问题是:一个函数可以拥有私有变量,并且外部可以通过闭包访问该私有变量,如特权方法(类似 JavaBean 的写法)。

针对以上言论,需要反驳一下。

6 楼:变量 add,以及 add 的 count 属性、plus() 方法都是公共的,这意味着其他代码可以直接修改你的 count 属性,造成不必要的麻烦。

这句话,本身就存在问题,6楼是使用new构造了一个object,并且再对object的属性和方法进行赋值,后面直接onclick 调object.method()就行了,所谓的方法都是公开的,这个的确,但是要知道纵使是公开的,也必须使用这个对象访问或者修改才行,而不是所谓的直接可以修改。

var count;

var myObj=new Object;

myObj.count=2; //这里的myObj.count与上面声明的count可不是一个东西。

另外:

<script>

function Student(value) {

    var name = value;

    this.getName = function() { return name; };

    this.setName = function(value) {name = value; };

}

<script>

以上代码,难道不觉得很像是在声明一个对象?并且为了使用所谓的 function 的闭包,还非得使用下 this 关键词,到最后还需要使用 new 构造下 Student,并且为了保证能对该函数的私有变量 name 赋值,还搞了个函数的变量传过去,用起来真的是非常别扭,并且,这个方法好像在全局也都可以通过 Student 来访问吧?

<script>

function Student(value) {

    var name = value;

    this.getName = function() { return name; };

    this.setName = function(value) {name = value; };

}

myStu=new Student("name");

//我是不是可以在script内任意一个地方通过myStu.setName("name")来修改name值?

<script>

所以,其实核心的需求就是,我可以搞一个局部的变量,并且这个变量的生命周期还必须是类全局性质的,但又需要与全局变量区分开,那就直接用对象咯,声明一个对象,再定义下这个对象的某个属性值,那这个属性值变量本来就必须通过这个对象来访问,也即已经达到了将这个变量限制在这个对象的范围内。

这个时候,又何必多次一举,非得使用所谓的闭包,更何况,你不觉得如果把一个函数定义为一个对象的方法,本身就已经是一种闭包了吗?为啥还非得用 function 达到?

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

热门产品

历史上的今天:03月29日

热门专题

昆明综合高中|昆明综合高中
昆明综合高中
小程序开发|微信小程序,小程序开发,小程序,小程序制作,微信小程序开发,小程序公司,小程序开发公司,分销,三级分销系统,分销系统
小程序开发
云南巨榕教育投资集团有限公司|云南巨榕教育投资集团有限公司,巨榕教育集团,巨榕教育
云南巨榕教育投资集团有限公司
大理科技管理学校|大理科技管理学校,大理科技,大理科技中等职业技术学校,大理科技管理中等职业技术学校,大理科技学校
大理科技管理学校
卓越综合高中|卓越综合高中
卓越综合高中
安徽开放大学|安徽开放大学报名,安徽开放大学报考,安徽开放大学,什么是安徽开放大学,安徽开放大学学历,安徽开放大学学费,安徽开放大学报名条件,安徽开放大学报名时间,安徽开放大学学历,安徽开放大学专业
安徽开放大学
云南综合高中|云南综合高中
云南综合高中
易捷尔高职单招|易捷尔高职单招,易捷尔高职单招培训,单招分数线,单招录取分数线,高职单招学校分数线
易捷尔高职单招

微信小程序

微信扫一扫体验

立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部