1.新建对象,方法内变量作用域理解错误

        var md1 = {count: 0,add: function () {count++;},sub: function () {count--;},show: function () {console.log(count);}};md1.add();md1.add();md1.show();

在不加this的情况之下,会试图与当前对象的作用域内寻找count。如果硬要这样写,就必须加入一个全局变量(或者在上级作用域内有count)count,如下。

        var count = 100;var md1 = {count: 0,add: function () {count++;},sub: function () {count--;},show: function () {console.log(count);}};md1.add();md1.add();md1.show();

当然,正确的方法是如下这样。

        var md1 = {count: 0,add: function () {this.count++;},sub: function () {this.count--;},show: function () {console.log(this.count);}};md1.add();md1.add();md1.show();

但是这样也不好,会暴露count这个理应是私有的成员,可直接在外部代码之中修改count,如下

        var md1 = {count: 0,add: function () {this.count++;},sub: function () {this.count--;},show: function () {console.log(this.count);}};md1.add();md1.add();md1.count = 100;md1.sub();md1.add();md1.show();

2.立即执行函数式,这种方式可以屏蔽count

        var md1 = (function () {var count = 0;var add = function () {count++;};var sub = function () {count--;};var show = function () {console.log(count);};return {add: add,sub: sub,show: show};})();md1.add();md1.add();md1.count = 100;md1.sub();md1.add();md1.show();

3.放大模式,用于向已有模块里面添加新的公共成员

        var md1 = (function () {var count = 0;var add = function () {count++;};var sub = function () {count--;};var show = function () {console.log(count);};return {add: add,sub: sub,show: show};})();var md2 = (function (md) {md.add2 = function () {md.add();md.add();};return md;})(md1);md1.add();md1.add();md1.sub();md2.add2();md1.show();md2.show();

4.宽放大模式

        var md1 = (function () {var count = 0;var add = function () {count++;};var sub = function () {count--;};var show = function () {console.log(count);};return {add: add,sub: sub,show: show};})();var md2 = (function (md) {md.add2 = function () {md.add();md.add();};return md;})(md1 || {});md1.add();md1.add();md1.sub();md2.add2();md1.show();md2.show();

独立性是模块的重要特点,模块内部最好不与程序的其他部分直接交互。

为了在模块内部调用全局变量,必须显式地将其他变量输入模块。

  var module1 = (function ($, YAHOO) {

    //...

  })(jQuery, YAHOO);

上面的module1模块需要使用jQuery库和YUI库,就把这两个库(其实是两个模块)当作参数输入module1。这样做除了保证模块的独立性,还使得模块之间的依赖关系变得明显。这方面更多的讨论,参见Ben Cherry的著名文章《JavaScript Module Pattern: In-Depth》。

这个系列的第二部分,将讨论如何在浏览器环境组织不同的模块、管理模块之间的依赖性。

转载于:https://www.cnblogs.com/jimaojin/p/7650046.html

JavaScript立即执行函数学习相关推荐

  1. JavaScript立即执行函数报错--立即执行函数原理分析

    JavaScript立即执行函数报错 1.'()'在JavaScript环境中有提升运算符优先级和执行函数的作用如果直接在JavaScript环境中执行'()',环境会报出语法错误提示. 2.'()' ...

  2. JavaScript自执行函数,自执行函数是什么,存在的意义?

    JavaScript自执行函数 1.自执行函数是什么 2.自执行函数存在的意义 2.1封装 3.自执行函数两种常见的的写法 3.1自执行函数的第一种写法 3.2自执行函数的第二种写法 4.自执行函数的 ...

  3. JavaScript 自执行函数剖析

    回想一下,我们平时写的一些具名函数(也就是区别于匿名函数的函数),如下面一个例子: 1 function sayHello(){ 2 console.log("hello,我是林丽君&quo ...

  4. Javascript 立即执行函数

    http://weizhifeng.net/immediately-invoked-function-expression.html var f1 = function() {var res = [] ...

  5. Javascript 自执行函数

    前言 大家学JavaScript的时候,经常遇到自执行匿名函数的代码,今天我们主要就来想想说一下自执行. 在详细了解这个之前,我们来谈了解一下"自执行"这个叫法,本文对这个功能的叫 ...

  6. JavaScript 立即执行函数的两种写法

    (function(str){console.log(str+'欢迎你~');})('行步至春深');(function(str) {console.log(str+'欢迎你~');}('行路易知难' ...

  7. JavaScript 自执行函数和 jQuery扩展方法

    我们通常将JS代码写在一个单独的JS文件中,然后在页面中引入该文件.但是,有时候引入后会碰到变量名或函数名与其它JS代码冲突的问题.那么如何解决这个问题呢?作用域隔离.在JS中,作用域是通过函数来划分 ...

  8. javascript自执行函数

    概述 自执行函数又被称为立即调用函数,顾名思义,就是可以函数声明后可以立即被执行,我们在读常用js库(如jquery)源码时,经常会发现自执行函数的身影,下面说下我的理解. 写法 自执行函数有两种写法 ...

  9. JavaScript 异步执行的学习笔记 - 什么是事件循环 Event loop?

    原文 使用像 JavaScript 这样的语言进行编程时,最重要但也经常被误解的部分之一是如何表达和操作一段需要某段时间才能完成执行的程序行为. 这不仅仅是从 for 循环开始到 for 循环结束发生 ...

最新文章

  1. 八十五、再探希尔排序,桶排序,计数排序和基数排序
  2. 华为手机可以下载鸿蒙系统吗_华为鸿蒙手机系统首次曝光,汉字界面简洁明了...
  3. 椭圆中心到椭圆切线的距离
  4. libevent源码深度剖析十
  5. ue4 怎么修改骨骼动画_【UE4】动画重定向
  6. leetcode 978. 最长湍流子数组(动态规划)
  7. LeetCode 492. 构造矩形
  8. mysql 查询此时日期_mysql 查询日期
  9. HTML(2)--- 简介
  10. QQ sdk和Android sdk 28的兼容处理
  11. live555 RTSP服务器与客户端通信源码分析
  12. 机器学习:Kmeans聚类算法总结及GPU配置加速demo
  13. SPECTRUM发布6种新型AWG任意波形发生器
  14. echarts地图数据过旧,通过geojson自定义经纬度地图
  15. Mac删除软件之后图标还在怎么办?
  16. Linux下优雅的让程序后台运行
  17. 全球顶尖公司的七大设计理念
  18. 【U8+】win10/11系统注册用友U8硬加密
  19. MySQL高可用架构-MMM环境部署记录
  20. 深入浅出Mybatis-改造Cache

热门文章

  1. mysql 回表查询优化_MySQL中的回表查询与索引覆盖:一次百万级别分页查询使用Limit 从90秒到0.6毫秒的优化...
  2. java ora 00911_ORA-00911错误
  3. 0-1背包问题(C语言)
  4. iptables(下)规则
  5. 怀旧服服务器怎么调整显卡性能,用顶级配置玩wow怀旧服是怎样的体验?
  6. oracle查询orapw文件,oracle学习笔记《一》
  7. python集合的操作_Python集合操作方法详解
  8. limesurvey php5.2,limesurvey(配置心得)
  9. 元器件大一点好,还是小一点好?
  10. 为什么需要这么多编程语言?