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) }( ...
随机推荐
- ActiveSync中的http内容组织
1. POST Request 数据格式 Request-line Request-headers CR/LF Request Body Request-line POST <URI> H ...
- springboot快速使用
1.编写SpringConfig 用于实例化Spring容器 @Configuration //通过该注解来表明该类是一个Spring的配置,相当于一个xml文件 @Bean // 通过该注解来表明是 ...
- 一脸懵逼学习Hive的元数据库Mysql方式安装配置
1:要想学习Hive必须将Hadoop启动起来,因为Hive本身没有自己的数据管理功能,全是依赖外部系统,包括分析也是依赖MapReduce: 2:七个节点跑HA集群模式的: 第一步:必须先将Zook ...
- Ncurses - Panel
当你需要创建许多窗口时,你很快就会发现它们会变得难以管理.Panel library提供了很好的解决方案. Panel 实际上是一个窗口,通过容器 - 栈 来管理,栈顶的 panel 是完全可见的,其 ...
- python安装plinter
我下的python2.7是有pip的,但是直接在cmd中输入pip是无响应的.要去环境变量中配置D:/python/Script 这样就可以了. pip install splinter就能下载了
- Get与Post区别小结
Get:是以实体的方式得到由请求Url所指定资源的信息,如果请求Url只是一个数据产生过程,那么最终要在实体中返回的是处理过程的结果所指向的资源,而不是处理过程的描述. Post:是用来向 ...
- javascript 和 下拉列表
<form id="f"> <select size="1" name="s"> <option value= ...
- 如何访问https的网站?-【httpclient】
备注:本处代码使用groovy和httpclient4.3作为例子进行讲述 在普通方式下,当使用httpclient进行访问某个网站时,大致使用如下的代码进行访问: CloseableHttpClie ...
- Flink--connect
用来将两个dataStream组装成一个ConnectedStreams 而且这个connectedStream的组成结构就是保留原有的dataStream的结构体:这样我们就可以把不同的数据组装成同 ...
- outlook邮件中样式问题
目前要做一个定时发送邮件的功能,邮件的大致内容布局如下: HTML中 在QQ邮件中,可以进行正常显示. 在outlook网页版,也可以正常显示, outlook客户端 但是到了客户端就会出现很多很神奇 ...