JS的作用域保护

网友投稿 867 2022-11-07

JS的作用域保护

JS的作用域保护

网页中,如果引用了许多JS,尤其是动态加载,那么其中的变量、函数名称就很容易冲突。虽然每个名称加上前缀可以解决这个问题,但未免太烦琐了。应该尽量用函数将它们包裹起来。面向对象三大特性之一是封装,对私有变量和方法进行保护,javascript没有类,只有函数。幸运的是,JS的函数是万能的,可以用来封装。

一、构造实例

例子:

var f = new function(){ let _i = 0; //这里的this,应该是指向f this.hi = function(){ alert(_i); }; this.go = function(){ _i = add(_i); }; function add(i){ return ++i; }};f.hi();//0f.go();f.hi();//1

这个例子里面,封装了私有变量_i和私有方法:add(),对外只暴露了hi()和go()。对于重名问题,我们只需控制 f 这个变量就行了,冲突机会大大下降。

二、静态类库

所谓静态类库,实质上就是一个JSON,元素是函数。 例子:

var f2 = (function(){ var _i = 0; return {//返回一个JSON hi:hi, go:go }; function hi(){ alert(_i); } function go(){ _i = add(_i); } function add(i){ return ++i; }})(); f2.hi();f2.go();f2.hi();

三、执行块

如果无须考虑复用,只避免重名,那么可以将语句用函数包裹并即时执行,这种方式同样也有良好的封装性:

(function(){ let _i = 0; _i = add(_i); alert(_i); function add(i){ return ++i; }})();

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:oracle导出序列sequence
下一篇:mybatis调用mysql存储过程(返回参数,单结果集,多结果集)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~