JavaScript立即执行函数学习
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》。
这个系列的第二部分,将讨论如何在浏览器环境组织不同的模块、管理模块之间的依赖性。
JavaScript立即执行函数学习的更多相关文章
- javaScript 立即执行函数学习笔记
		立即执行函数: 即执行函数(Immediate Functions),立即执行函数模式是一种语法,可以让你的函数在定义后立即被执行 立即执行函数(immediate function)术语不是在ECM ... 
- javascript立即执行函数
		javascript和其他编程语言相比比较随意,所以javascript代码中充满各种奇葩的写法,有时雾里看花;当然,能理解各型各色的写法也是对javascript语言特性更进一步的深入理解. ( ... 
- JavaScript 立即执行函数
		js中(function(){…})()立即执行函数写法理解 javascript和其他编程语言相比比较随意,所以javascript代码中充满各种奇葩的写法,有时雾里看花,当然,能理解各型各色的写法 ... 
- javascript立即执行函数 (function(){})()
		看到一段代码: (function(){ var outer = $('#subject'); outer.find('li').on('mouseover', mouseover); })() ( ... 
- (译)详解javascript立即执行函数表达式(IIFE)
		写在前面 这是一篇译文,原文:Immediately-Invoked Function Expression (IIFE) 原文是一篇很经典的讲解IIFE的文章,很适合收藏.本文虽然是译文,但是直译的 ... 
- javascript自执行函数为什么要把windows作为参数传进去
		http://segmentfault.com/q/1010000000311686 (function (window, $, undefined) { play=function(){ $(&qu ... 
- 详解javascript立即执行函数表达式(IIFE)
		立即执行函数,就是在定义函数的时候直接执行,这里不是申明函数而是一个函数表达式 1.问题 在javascript中,每一个函数在被调用的时候都会创建一个执行上下文,在函数内部定义的变量和函数只能在该函 ... 
- Javascript 自动执行函数(立即调用函数)
		开头:各种原因总结一下javascript中的自动执行函数(立即调用函数)的一些方法,正文如下 在Javascript中,任何function在执行的时候都会创建一个执行上下文,因为function声 ... 
- javascript立刻执行函数
		一般常见的立刻执行函数推荐如下两种: (function(a){ console.log(a); })("kk"); (function(a){ console.log(a) }( ... 
随机推荐
- 捷信达会员管理系统SQL语句相关
			捷信达会员管理系统SQL语句相关 USE gshis GO SET ANSI_NULLS, QUOTED_IDENTIFIER ON GO /***************************** ... 
- SQL Server等待
			等待大概分为3类:资源等待.队列等待.外部等待 过滤掉系统相关的等待类型的语句.(查看常用的等待信息) SELECT wait_type , signal_wait_time_ms , wait_ti ... 
- 宿主进程 [*.vshost.exe] & [*.vshost.exe.config]
			宿主进程 [*.vshost.exe] & [*.vshost.exe.config] pdb文件: 英文全称:Program Database File 中文全称:程序数据库 文件 Debu ... 
- [转] Javascript模块化编程(一):模块的写法
			随着网站逐渐变成"互联网应用程序",嵌入网页的Javascript代码越来越庞大,越来越复杂. 网页越来越像桌面程序,需要一个团队分工协作.进度管理.单元测试等等......开发者 ... 
- python全栈开发day61-django简单的出版社网站展示,添加,删除,编辑(单表的增删改查)
			day61 django内容回顾: 1. 下载: pip install django==1.11.14 pip install -i 源 django==1.11.14 pycharm 2. 创建项 ... 
- Flink在流处理上常见的Source和sink操作
			flink在流处理上的source和在批处理上的source基本一致.大致有4大类 1.基于本地集合的source(Collection-based-source) 2.基于文件的source(Fil ... 
- ncat
			ncat 或者说 nc 是一款功能类似 cat 的工具,但是是用于网络的.它是一款拥有多种功能的 CLI 工具,可以用来在网络上读.写以及重定向数据. 它被设计成可以被脚本或其他程序调用的可靠的后端工 ... 
- 关于mac远程链接window服务器以及实现共享文件
			要最近换了新电脑mac 虽然运行速度666 但是真的很多地方都使用不习惯 这里记录一下 关于 远程链接window主机的问题 方便以后用 首先是 链接: 在应用里 找到 然后类似于 wind ... 
- 修改注册表.exe的文件目录
			文件打开方式不能选择默认打开文件 cmd >regedit 以sublime_text为例 HKEY_CLASSES_ROOT/Applications/sublime_text.exe/she ... 
- 启动 ServiceFabric Windows服务报1053
			Remote Procedure Call (RPC) Locator和 Windows Firewall是否启动. 以管理员身份运行PowerShell,输入Unregister-Scheduled ... 
