`
flex_莫冲
  • 浏览: 1090352 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

javascript的私有变量和全局变量

 
阅读更多
要写一个jquery插件,可以实例化插件并传递不同的参数给不同的div。实例化时碰到问题。
首先讲下函数中变量的私有性。
function initMp3(options){
        var isPlaying = false;
        var audioImg;
        var audio;
……
}
任何在函数中定义的变量和函数都可以认为是私有变量。即使var entity = new initMp3(),也是无法访问到entity.isPlaying;
但是若在函数内定义this.isplaying,则可以在实例中访问到。因为this.isplaying是公有的。
访问这些私有变量的方式可以通过在函数中定义一个this.isplaying的闭包,并在闭包内访问私有变量。
this.isplaying = function(){return audioImg};
可以通过这种方式隐藏不应该被直接修改的数据。

下面给个闭包中的变量定义的私有和全局范围的例子

    (function(){
//私有属性 不能实例化
        function testFunc(obj){
            var a = obj.a;//私有属性。不能通过实例访问
            var b = obj.b;
            console.log(a + "," + b);
            this.options = {//成员属性可以通过实例访问
                "a": a,
                "b": b
            }
        };
this.outerFunc = testFunc;//成员属性 可以实例化
Gloable = "abc";//全局对象
    })();
   
    var test = new outerFunc({
        "a": 13,
        "b": 144
    });
    var test2 = new outerFunc({
        "a": 00,
        "b": 10
    });
console.log(test.options);//13 144
console.log(test2.options);//00 10
console.log(Gloable);//abc

//引用类型 和值类型传递
var isDo = {isdo:true};
var obj = {isDo2:isDo};

obj.isDo2.isdo = true;
console.log(obj.isDo2);//false 输出最后的值
console.log(isDo);//false
isDo.isdo = false;
console.log(obj.isDo2);//false
console.log(isDo);//false
参考《javascript 高级程序设计第二版》第七章
分享到:
评论

相关推荐

    JavaScript声明全局变量访问方法

    - 尽量减少全局变量的使用,优先考虑局部变量和作用域闭包。 - 使用模块系统(如CommonJS、ES6模块)管理变量,以防止全局空间的污染。 - 使用`const`声明常量,避免不必要的修改。 - 使用立即执行函数表达式...

    JavaScript私有变量实例详解

    JavaScript私有变量是一种重要的编程概念,它涉及到函数作用域、闭包和面向对象设计原则。私有变量在函数内部定义,不能直接从函数外部访问,这有助于保护数据,防止不必要的篡改,确保代码的安全性和封装性。 在...

    浅谈JavaScript的全局变量与局部变量_.docx

    总的来说,理解JavaScript的全局变量和局部变量的规则,有助于编写更安全、更易于维护的代码。正确使用作用域,避免全局变量滥用,可以显著提高代码的可读性和可靠性。在编写JavaScript代码时,应该始终关注变量的...

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

    JavaScript中的块级作用域、私有变量和模块模式是编程中至关重要的概念,尤其是在大型项目中,它们有助于保持代码的整洁和可维护性。 1. 块级作用域(私有作用域) 在JavaScript中,`var`关键字声明的变量具有函数...

    javascript全局变量封装模块实现代码

    总结来说,JavaScript全局变量封装模块是通过创建一个自执行函数来实现的,这个函数内部创建了全局对象的私有副本,并将需要暴露给全局作用域的变量或函数绑定到这些对象上。这样做提高了代码的可维护性,避免了全局...

    js代码-函数表达式 闭包 私有变量

    综上所述,函数表达式、闭包和私有变量是JavaScript中的关键概念,它们提供了强大的工具来编写更复杂和高效的代码。在实际项目中,如`main.js`这样的文件可能会包含利用这些概念实现的功能。通过阅读和理解这些文件...

    ProtectJSJavaScript中真正私有的属性和方法

    5. **模块化**:在Node.js环境中,ProtectJS可以帮助创建模块化组件,每个组件都有自己的私有状态,避免了全局变量污染和意外的相互影响。 6. **性能考虑**:虽然闭包可以提供私有性,但需要注意的是,由于闭包会...

    JS变量问题详解

    所谓提升,就是指在代码执行之前,JavaScript引擎会将变量和函数声明移动到其所在作用域的顶部。使用var声明的变量和函数都会被提升,而let和const声明的变量则不会被提升,存在暂时性死区(TDZ)。 关于变量的问题...

    JavaScript 面向对象的 私有成员和公开成员

    在JavaScript中,私有成员通常是指那些不通过this关键字声明的变量和方法。它们无法从类的实例外部直接访问。例如,通过var关键字声明的变量,或者通过function关键字声明的方法,在类的外部是不可见的,因此被视为...

    跟我学习javascript的全局变量

    这是一种常见的JavaScript设计模式,通过立即调用的函数表达式(IIFE)来创建一个局部作用域,内部定义的变量和函数不会泄漏到全局空间。例如: ``` var serial_maker = (function () { var counter = 0; return...

    javascript闭包的理解

    在JavaScript中,变量的作用域分为全局变量和局部变量。全局变量是在任何函数外部定义的变量,而局部变量则是在函数内部定义的变量。在JavaScript中,每个函数都有自己的作用域链。作用域链是一个对象列表,包含了...

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

    JavaScript中的块级作用域和私有变量是编程中两个重要的概念,它们对于理解和编写高效、无污染的代码至关重要。本文将深入探讨这两个主题,并通过实例进行解析。 首先,我们来讨论块级作用域。在JavaScript中,块级...

    JavaScript知识点总结(十六)之Javascript闭包(Closure)代码详解

    在JavaScript中,变量的作用域分为两种:全局变量和局部变量。全局变量是在函数外部定义的变量,可以在JavaScript程序的任何地方被访问。局部变量则是在函数内部定义的变量,只能在该函数内部访问。当在函数内部访问...

    JavaScript Best Practices & Tricks

    2. **保护私有变量**:虽然JavaScript没有真正的私有变量,但可以使用伪私有变量(如在变量名前加下划线 `_myPrivate`)来遵循编程约定,限制外部访问。 3. **模式与封装**:学习和应用常见的设计模式,如模块模式...

    javascript闭包子类超类理解

    变量作用域分为全局变量和局部变量。全局变量在整个脚本中都可访问,而局部变量只在其所在函数内部有效。一个特殊的规则是,函数内部可以直接访问全局变量,但外部无法直接访问函数内部的局部变量。如果不使用`var`...

    全面解析JavaScript Module模式

    模块模式的关键在于利用匿名函数和闭包来创建私有作用域,从而保护内部变量和函数不被全局空间污染。 ### 基本用法 Module模式的基本实现通常涉及到一个立即执行的匿名函数,通过这个函数创建一个私有作用域。在...

    JavaScript设计模式+JavaScript模式+JavaScript异步编程

    - 模块模式:通过闭包创建私有变量和方法,同时提供公共接口。 - 函数组合模式:将多个函数组合起来,形成新的功能。 2. **JavaScript模式**: JavaScript模式不仅包括设计模式,还包括编码风格和最佳实践。例如...

Global site tag (gtag.js) - Google Analytics