`
zhouxiaofeihaha
  • 浏览: 22216 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

javascript闭包实现静态/私有变量的优缺点——学习笔记

阅读更多

/*=======闭包模式——静态私有变量,缺点:所有实例共享静态变量,实例没有私有变量=======*/

function myObject(){

//this.name = "asdfasdf";实例公有变量

};

(function(){

//静态私有变量

var name = "";

myObject.prototype.setName = function(str){

name = str;

};

myObject.prototype.write = function(){

console.log(name);

}

})();

var m1 = new myObject();

var m2 = new myObject();

m1.setName("licheng");

m2.write();

/*==================================================*/

 

 

 

/*=======构造函数模式——私有变量,缺点:每次产生实例对象都要生成同样一组新方法(方法就是对象,对象占内存),方法应该共享=======*/

function s(){

//私有变量

var name = "licheng";

this.setName=function(str){

name = str;//通过闭包特性,有权访问其作用域链上一层活动对象中的变量name

};

this.getName = function(){

console.log(name);

};

}

var s1 = new s();

var s2 = new s();

s1.setName("xiaofei");

s2.getName();

s1.write();

 

//以上两个模式都存在共同的缺点:多查找作用域链中的一个层次,就会在一定程度上影响查找速度,而这正是使用闭包和私有变量的一个明显//不足之处。

1
1
分享到:
评论

相关推荐

    JavaScript学习笔记

    闭包则可以保存函数内部的状态,形成私有变量,避免全局变量污染。 在JavaScript的世界里,还有许多其他精彩的内容,比如原型链、类与继承、模块系统(CommonJS、ES6模块)、Ajax和Fetch API用于前后端通信,以及...

    javascript高级 笔记

    这份"javascript高级 笔记"涵盖了从JavaScript基础进阶到高级特性的深入理解,旨在帮助那些已经掌握了JavaScript基础知识的学习者进一步提升技能。 一、JavaScript高级特性 在JavaScript高级阶段,你会接触到许多...

    JavaScript语言基础知识点总结十张图

    闭包是指有权访问另一个函数作用域中的变量的函数,常用于实现私有变量和模块化。理解闭包的关键在于作用域链和垃圾回收机制。 8. **异步编程** JavaScript是单线程的,但通过事件循环和回调函数、Promise、async...

    python, golang, js 等学习笔记归档. 包含代码, 文档, etc.zip

    5. **闭包**:理解作用域和闭包的概念,创建私有变量和函数。 6. **面向对象**:构造函数、原型链、类(ES6新增)。 7. **模块化**:CommonJS(Node.js)和ES6的import/export。 8. **Promise与async/await**:解决...

    day03-js高级.zip

    - **闭包**:学习闭包的定义、作用以及如何使用它们来创建私有变量和封装函数。 - **作用域**:区分全局作用域和局部作用域,了解块级作用域以及`let`、`var`和`const`的区别。 - **异步编程**:包括回调函数、...

    js读书笔记以及知识要点

    6. **闭包**:闭包是一种特殊的函数,它可以访问其自身作用域、外部函数作用域以及全局作用域的变量,常用于封装私有变量和实现模块化。 7. **ES6及后续版本的新特性**:包括箭头函数、模板字符串、解构赋值、类...

    js-curso-em-video:观看视频的人在JavaScript脚本平台上的视频浏览器

    7. **闭包**:理解闭包的原理和应用场景,如封装私有变量和创建作用域。 8. **ES6新特性**:介绍ECMAScript 6引入的新语法,如箭头函数、模板字符串、let和const、解构赋值、Promise等。 9. **模块化**:了解如何...

    advance_note

    3. **闭包**:闭包的定义、作用域链、内存管理,以及如何利用闭包实现私有变量和模块化。 4. **异步编程**:事件循环(Event Loop)、回调函数、Promise、async/await,以及对Ajax和Fetch API的理解。 5. **ES6及...

    DongwhanLee.github.io:Dongwhan的DevLog

    4. **闭包**:深入学习闭包的工作原理,以及如何利用闭包来封装变量和实现私有属性。 5. **异步编程**:包括回调函数、Promise、async/await的使用,理解JavaScript的事件循环和执行上下文。 6. **DOM操作**:如何...

Global site tag (gtag.js) - Google Analytics