深入理解JavaScript中的块级作用域、私有变量与模块模式


Posted in Javascript onOctober 31, 2016

本文详细的介绍了JavaScript中的块级作用域、私有变量与模块模式,废话就不多说了,具体如下:

1.块级作用域(私有作用域),经常在全局作用域中被用在函数外部,从而限制向全局作用域中添加过多的变量和函数。

(function(count){ 
  for(var i=0;i<count;i++){ 
    console.log(i);//=>0、1、2、3、4 
  } 
  console.log(i);//=>5 
})(5);
(function(){ 
  var now=new Date(); 
  if(now.getMonth()==0 && now.getDate()==1){ 
    console.log("新年快乐"); 
  }else{ 
    console.log("尽情期待"); 
  } 
})();

 2.私有变量:任何在函数中定义的变量,都可以认为是私有变量,因为不能在函数的外部访问这些变量。

特权方法:有权访问私有变量和私有函数的公有方法称为特权方法。

2.1)在构造函数中定义特权方法:

function Person(name){ 
  this.getName=function(){ 
    return name; 
  }; 
  this.setName=function(value){ 
    name=value; 
  }; 
} 
var person1=new Person("Jason"); 
console.log(person1.getName());//=>Jason 
person1.setName("gray"); 
console.log(person1.getName());//=>gray 
var person2=new Person("Michael"); 
console.log(person1.getName());//=>gray 
console.log(person2.getName());//=>Michael 
person2.setName('Alex'); 
console.log(person1.getName());//=>gray 
console.log(person2.getName());//=>Alex

构造函数模式的缺点是针对每个实例都会创建同样一组新方法。

2.2)静态私有变量来实现特权方法

在私有作用域中,首先定义私有变量和私有函数,然后定义构造函数及其公有方法。

(function(){ 
  //私有变量和函数 
  var name=""; 
  Person=function(value){ 
    name=value; 
  }; 
  //特权方法 
  Person.prototype.getName=function(){ 
    return name; 
  }; 
  Person.prototype.setName=function(value){ 
    name=value; 
  } 
})(); 
var person1=new Person("Jason"); 
console.log(person1.getName());//=>Jason 
person1.setName("gray"); 
console.log(person1.getName());//=>gray 
var person2=new Person("Michael"); 
console.log(person1.getName());//=>Michael 
console.log(person2.getName());//=>Michael 
person2.setName('Alex'); 
console.log(person1.getName());//=>Alex 
console.log(person2.getName());//=>Alex

3.模块模式:通过为单例添加私有变量和特权方法能够使其得到增强。

如果必须创建一个对象并以某些数据对其进行初始化,同时还要公开一些能够访问这些私有数据的方法,那么就可以使用模块模式。

var application=function(){ 
  //私有变量和函数 
  var components=[]; 
  //初始化 
  components.push(new BaseComponent()); 
  //公共接口 
  return { 
    getComponentCount:function(){ 
      return components.length; 
    }, 
    registerComponent:function(){ 
      if(typeof component=="object"){ 
        components.push(component); 
      } 
    } 
  } 
}();

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript的面向对象方法以及差别
Mar 31 Javascript
JS正则表达式大全(整理详细且实用)
Nov 14 Javascript
jquery中使用循环下拉菜单示例代码
Sep 24 Javascript
js中iframe调用父页面的方法
Oct 30 Javascript
javascript几个易错点记录
Nov 26 Javascript
jQuery实现图片上传和裁剪插件Croppie
Nov 29 Javascript
Javascript HTML5 Canvas实现的一个画板
Apr 12 Javascript
JS实现兼容各种浏览器的高级拖动方法完整实例【测试可用】
Jun 21 Javascript
json对象转为字符串,当做参数传递时加密解密的实现方法
Jun 29 Javascript
谈谈Vue.js——vue-resource全攻略
Jan 16 Javascript
jquery单击文字或图片内容放大并居中显示
Jun 23 jQuery
微信小程序实现发微博功能的示例代码
Jun 24 Javascript
jQuery grep()方法详解及实例代码
Oct 30 #Javascript
webix+springmvc session超时跳转登录页面
Oct 30 #Javascript
js获取时间函数及扩展函数的方法
Oct 30 #Javascript
jquery ajax后台返回list,前台用jquery遍历list的实现
Oct 30 #Javascript
浅谈JS函数定义方式的区别
Oct 30 #Javascript
基于SpringMVC+Bootstrap+DataTables实现表格服务端分页、模糊查询
Oct 30 #Javascript
原生js代码实现图片放大境效果
Oct 30 #Javascript
You might like
php array_walk_recursive 使用自定的函数处理数组中的每一个元素
2016/11/16 PHP
简述php环境搭建与配置
2016/12/05 PHP
微信公众平台开发教程③ PHP实现微信公众号支付功能图文详解
2019/04/10 PHP
jQuery的一些注意
2006/12/06 Javascript
关于Mozilla浏览器不支持innerText的解决办法
2011/01/01 Javascript
jsvascript图像处理—(计算机视觉应用)图像金字塔
2013/01/15 Javascript
基于编写jQuery的无缝滚动插件
2014/08/02 Javascript
喜大普奔!jQuery发布 3.0 最终版
2016/06/12 Javascript
基于css3新属性transform及原生js实现鼠标拖动3d立方体旋转
2016/06/12 Javascript
JS前向后瞻正则表达式定义与用法示例
2016/12/27 Javascript
简单的渐变轮播插件
2017/01/12 Javascript
jQuery实现的粘性滚动导航栏效果实例【附源码下载】
2017/10/19 jQuery
node.js支持多用户web终端实现及安全方案
2017/11/29 Javascript
form表单数据封装成json格式并提交给服务器的实现方法
2017/12/14 Javascript
超出JavaScript安全整数限制的数字计算BigInt详解
2018/06/24 Javascript
详解Vue webapp项目通过HBulider打包原生APP
2018/06/29 Javascript
js实现图片上传并预览功能
2018/08/06 Javascript
python爬虫实现教程转换成 PDF 电子书
2017/02/19 Python
对Python3中的print函数以及与python2的对比分析
2018/05/02 Python
twilio python自动拨打电话,播放自定义mp3音频的方法
2019/08/08 Python
python 实现提取log文件中的关键句子,并进行统计分析
2019/12/24 Python
TensorFlow查看输入节点和输出节点名称方式
2020/01/04 Python
python实现PCA降维的示例详解
2020/02/24 Python
python3检查字典传入函数键是否齐全的实例
2020/06/05 Python
python读写数据读写csv文件(pandas用法)
2020/12/14 Python
德国古洛迷亚百货官网:GALERIA Kaufhof
2017/06/20 全球购物
美国在线购买和出售礼品卡网站:EJ Gift Cards
2019/06/09 全球购物
奥地利时尚、美容、玩具和家居之家:Kastner & Öhler
2020/04/26 全球购物
Perfume’s Club澳大利亚官网:西班牙领先的在线美容店
2021/02/01 全球购物
主题班会演讲稿
2014/05/22 职场文书
小学安全汇报材料
2014/08/14 职场文书
2014年教师党员自我评议
2014/09/19 职场文书
个人优缺点总结
2015/02/28 职场文书
2015年高校辅导员工作总结
2015/04/20 职场文书
2015年信息化建设工作总结
2015/07/23 职场文书
Python自然语言处理之切分算法详解
2021/04/25 Python