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) }( ...
随机推荐
- 获取访问IP
public static String GetIP() { String ip = HttpContext.Current.Request.ServerVariables["HTTP_X_ ...
- zabbix 3.2.4 使用详解
一:zabbix简介及原理 二:zabbix添加主机: /usr/share/zabbix/include/locales.inc.php #这里为zabbix语言包路径‘zh_CN’ 为true ...
- 磁盘blk_update_request: I/O error
https://www.cnblogs.com/chris-cp/p/6340289.html
- 2016-06-19 exshop第5天
昨天对grails3和spring-security进行了全面的调研并进行了试验,试用下来发现grails3的启动速度.代码修改后刷新速度.内存占用以及架构的设计上更加合理,asset-pipelin ...
- x86 版的 Arduino Intel Galileo 开发板的体验、分析和应用
1.前言 在今年(2013)罗马举办的首届欧洲 Make Faire 上,Intel 向对外发布了采用 x86 构架的 Arduino 开发板:Intel Galileo.这无疑是一个开源硬件领域的重 ...
- linux脚本实现scp命令自动输入密码和yes/no等确认信息
实现方式: 通过expect工具实现 #!/bin/bash yum -y install expect expect -c " spawn scp -r root@192.168.10.1 ...
- RocketMQ 启动停止命令
1.rocketmq的启动 进入rocketMQ解压目录下的bin文件夹 启动namesrv服务:nohup sh bin/mqnamesrv & 日志目录:{rocketMQ解压目录} ...
- solr配置IKAnalyzer抛出ClassNotFoundException
这个问题搞了很久,在QQ群上问了很久,关键很气人的是我居然被群主给开了.我也是醉了.我不知道我哪里得罪了那个solr群的群主. 废话不多说.抛出的异常如下: 刚开始一直认为是没有找到类,也就相当于没找 ...
- Python3 序列解包
转载自:https://blog.csdn.net/yilovexing/article/details/80576788 序列解包是 Python 3.0 之后才有的语法 什么是序列解包呢?先看一个 ...
- Uniform Generator
Computer simulations often require random numbers. One way to generate pseudo-random numbers is via ...