JS块级作用域和私有变量实例分析

本文实例讲述了JS块级作用域和私有变量。分享给大家供大家参考,具体如下:

块级作用域

(function(){
  //这里是块级作用域
})()

例如:

(function(){
  for(var i=0;i<5;i++){
    alert(i);//0,1,2,3,4
  }
})();
alert(i);//error

上例中,定义了一个块级作用域,变量i在块级作用域中可见的,但是在块级作用域外部则无法访问。

这种技术经常在全局作用域中被用在函数外部,从而限制向全局作用域中添加过多的变量和函数。

私有变量

任何在函数中定义的变量,都可以认为是私有变量。因为不能在函数的外部访问这些变量。私有变量包括函数的参数、局部变量和在函数内部定义的其他函数。

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

function MyObject(){
//私有变量和私有函数
  var privateVariable = 10;
  function privateFunction(){
    return false;
  }
  //特权方法,特权方法作为闭包有权访问在构造函数中定义的所有变量和函数
  this.publicMethod = function (){
    privateVariable++;
    return privateFunction();
  };
}
var obj = new MyObject();
obj.publicMethod();//

原型模式定义共有方法:

(function(){
  //私有变量和私有函数
  var privateVariable = 10;
  function privateFunction(){
    return false;
  }
  //构造函数
  MyObject = function(){
  };
  //公有/特权方法
  MyObject.prototype.publicMethod = function(){
    privateVariable++;
    return privateFunction();
  };
})();

模块模式:

var singleton = function(){
//私有变量和私有函数
  var privateVariable = 10;
  function privateFunction(){
    return false;
  }
  //特权/公有方法和属性
  return {
    publicProperty: true,
    publicMethod : function(){
      privateVariable++;
      return privateFunction();
    }
  };
}();

更多关于JavaScript相关内容可查看本站专题:《JavaScript常用函数技巧汇总》、《javascript面向对象入门教程》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》及《JavaScript数学运算用法总结》

希望本文所述对大家JavaScript程序设计有所帮助。

(0)

相关推荐

  • Javascript中的作用域及块级作用域

    一.块级作用域的说明 在学习JavaScript的变量作用域之前,我们应当明确几点: a.JavaScript的变量作用域是基于其特有的作用域链的. b.JavaScript没有块级作用域. c.函数中声明的变量在整个函数中都有定义. javascript的变量作用域,与平时使用的类C语言不同,例如C#中的代码: static void Main(string[] args) { if(true) { int number=10; } Console.WriteLine(number); } 这

  • 为什么JavaScript没有块级作用域

    最近在看ES2015 实战,里面有句话是这么说的 JavaScript 中没有块级作用域 可能会对这个问题大家可能有点不理解,先看个例子 var a = [] for(var i = 0; i < 10; i++){ a[i] = function(){ console.log(i); } } a[6](); 我想很多人会觉得这个问题的结果是6,然而很不幸,答案是10.在试试别的呢.a[7]().a[8]().a[8]()结果都是10!! 由于JS在处理primitive的变量的时候,很多时候会

  • js类中的公有变量和私有变量

    在cnblogs上看了关于js的一些文章 ,做下笔记: 先看代码1: function car(){     var wheel = 3;//私有变量     this.wheel = 4;//公有变量     alert(wheel);     alert(this.wheel); } var car1 = new car();结果是:3 4 代码2: function car(){     var wheel = 3;//私有变量     this.wheel = 4;//公有变量 } va

  • JavaScript私有变量实例详解

    本文实例讲述了JavaScript私有变量.分享给大家供大家参考,具体如下: 任何在函数中定义的变量,就是私有变量,因为这些变量在函数外部是无法访问到的.总的来说,私有变量包括函数的参数.局部变量和在函数内部定义的其他函数. function add(num1, num2){ var sum = num1 + num2; return sum; } 上面的例子中的 num1, num2, sum 就是函数的私有变量. 如果在这个函数内部创建一个闭包,那么闭包通过自己的作用域链也可以访问这些变量,

  • JavaScript使用闭包模仿块级作用域操作示例

    本文实例讲述了JavaScript使用闭包模仿块级作用域操作.分享给大家供大家参考,具体如下: 在阅读这篇文章之前,建议先阅读JavaScript的作用域链以及JavaScript闭包. 正如闭包的定义一样:"闭包指的是有权访问另一个函数作用域中的变量的函数", 闭包最大的意义就在于闭包可以对另一个函数作用域的变量进行访问,由此,闭包可以延伸出一系列的用法. 模仿块级作用域 JavaScript没有块级作用域的概念.这意味着在块语句中定义的变量,实际上是包含在函数中而非语句中创建的.从

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

    本文详细的介绍了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(no

  • 解析JavaScript模仿块级作用域

    javaScript 没有块级作用域的概念.这意味着在块语句中定义的变量,实际上是在包含函数中而非语句中创建的,来看下面的例子: function outputNumbers(count){ for (var i=0; i < count; i++){ alert(i); } alert(i); //计数 } 这个函数中定义了一个for 循环,而变量i 的初始值被设置为0. 在Java.C++等语言中,变量i 只会在for 循环的语句块中有定义,循环一旦结束,变量i 就会被销毁.可是在JavaS

  • JavaScript的作用域和块级作用域概念理解

    作用域永远都是任何一门编程语言中的重中之重,因为它控制着变量与参数的可见性与生命周期.讲到这里,首先理解两个概念:块级作用域与函数作用域. 什么是块级作用域呢? 任何一对花括号({和})中的语句集都属于一个块,在这之中定义的所有变量在代码块外都是不可见的,我们称之为块级作用域. 函数作用域就好理解了(*^__^*) ,定义在函数中的参数和变量在函数外部是不可见的. 大多数类C语言都拥有块级作用域,JS却没有.请看下文demo: //C语言 #include <stdio.h> void mai

  • 通过函数作用域和块级作用域看javascript的作用域链

    在ES6之前,javascript只有全局作用域和函数作用域.所谓作用域就是一个变量定义并能够被访问到的范围.也就是说如果一个变量定义在全局(window)上,那么在任何地方都能访问到这个变量,如果这个变量定义在函数内部,那么就只能在函数内部访问到这个变量. 全局作用域只要页面没关闭就会一直存在,而函数作用域只有在函数执行的时候才存在,执行完就销毁.且每次执行函数都会创建一个新的作用域. 那么什么是作用域链呢? 在了解作用域链之前,我们先了解一个执行期上下文的概念. 执行期上下文:当函数执行时,

  • javascript 动态生成私有变量访问器

    复制代码 代码如下: //创建一个新的用户对象,接受一个有许多属性的对象作为参数 function User(properties) { //遍历该对象的所有属性,并保证其作用域正确 for(var i in properties){ (function(which){ var p=i; //创建此属性的一个新的读取器(getter) which["get"+p]=function(){ return properties[p]; }; //创建此属性的一个新的设置器(setter)

  • JavaScript匿名函数之模仿块级作用域

    匿名函数 函数是JavaScript中最灵活的一种对象,这里只是讲解其匿名函数的用途. 匿名函数:就是没有函数名的函数. 函数的定义,首先简单介绍一下函数的定义,大致可分为三种方式 第一种:这也是最常规的一种 function double(x){ return 2 * x; } 第二种:这种方法使用了Function构造函数,把参数列表和函数体都作为字符串,很不方便,不建议使用. var double = new Function('x', 'return 2 * x;'); 第三种: var

随机推荐