即时函数(Immediate Functions)
1.即时函数的声明方法
即时函数(Immediate
Functions)是一种特殊的JavaScript语法,可以使函数在定义后立即执行:
(function
() {
alert('watch out!');
}());
下面分几部来理解这种写法:
- 橙色部分是一个函数表达式;
- 天蓝色的一对括号代表立即执行它,括号里是执行这个函数需要的参数(这个例子不需要参数);
- 再用一对括号(就是黑色的这一对)把上面的部分包起来。
黑色这一对括号可以让人明白这个表达式得到的是函数的返回值,而不是函数对象。许多人更喜欢下面的写法,效果与上面的完全相同:
(function
() {
alert('watch out!');
})();
2. 即时函数的应用场景
当你需要在程序启动时执行一些初始代码,这些初始化的工作只需要执行一次,而且当中用到的临时变量以后将不再有用,这时就可以把这些代码放到一个即时函数中执行:
(function () {
var days = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
today = new Date(),
msg = 'Today is ' + days[today.getDay()] + ', ' + today.getDate();
alert(msg);
}()); // "Today is Fri, 13"
3.即时函数的参数
下面的例子展示了一个带参数的即时函数:
// prints:
// I met Joe Black on Fri Aug 13 2010 23:26:59 GMT-0800 (PST)
(function (who, when) {
console.log("I met " + who + " on " + when);
}("Joe Black", new Date()));
有时,也可以把全局的this对象传给即时函数,这样就可以在不同的运行环境下复用即时函数中的代码:
(function (global) {
// access the global object via `global`
}(this));
当然,如果即时函数的参数比较多,而函数体又比较长的时候,你就需要上下来回的查看函数的参数列表定义和它的形参列表,这有时候挺烦人的。
4.即时函数的返回值
就如普通函数一样,即时函数也有返回值,可以把返回值赋给变量(注意,这里不是把函数对象赋值给变量):
var result = (function () {
return 2 + 2;
}());
如果把包在即时函数外的括号去掉,其效果完全相同。这种语法更简洁,但容易让人以为是把函数对象赋值给了变量,事实上变量得到的是函数的返回值:
var result = function () {
return 2 + 2;
}();
由于上面提到,即时函数有两种写法,所以下面的代码在效果上,与上面的两种写法完全相同:
var result = (function () {
return 2 + 2;
})();
这三个例子返回的都是原始数据类型。实际上即时函数可以返回任何数据,包括函数对象:
var getResult = (function () {
var res = 2 + 2;
return function () {
return res;
};
}());
由于利用即时函数可以提供一段独立的局部作用域,最后还有返回值,所以也有人喜欢给对象的属性赋初始值的时候使用即时函数:
var o = {
message: (function () {
var who = "me",
what = "call";
return what + " " + who;
}()),
getMsg: function () {
return this.message;
}
};
// usage
o.getMsg(); // "call me"
o.message; // "call me"
上面的例子里,message是一个string类型的属性,而不是一个方法。
5.
即时函数的使用
即时函数提供局部的变量作用域,不会污染全局环境,同时其中的代码又能立即执行,所以经常用在模块化的程序中。如果我们把每一个功能
独立的代码段都用即时函数来组织,并放到一个单独的js文件中,那我们什么时候想使用,就把这个js文件引入进来就可以了:
// module1 defined in module1.js
(function () {
// all the module 1 code ...
}());
即时函数(Immediate Functions)的更多相关文章
- JavaScript基础-即时函数(Immediate Functions)(017)
1.即时函数的声明方法 即时函数(Immediate Functions)是一种特殊的JavaScript语法,可以使函数在定义后立即执行:(function () { alert('watch ...
- ajax的使用:(ajaxReturn[ajax的返回方法]),(eval返回字符串);分页;第三方类(page.class.php)如何载入;自动加载函数库(functions);session如何防止跳过登录访问(构造函数说明)
一.ajax例子:ajaxReturn("ok","eval")->thinkphp中ajax的返回值的方法,返回参数为ok,返回类型为eval(字符串) ...
- 《理解 ES6》阅读整理:函数(Functions)(一)Default Parameter Values
对于任何语言来说,函数都是一个重要的组成部分.在ES6以前,从JavaScript被创建以来,函数一直没有大的改动,留下了一堆的问题和很微妙的行为,导致在JavaScript中使用函数时很容易出现错误 ...
- php中的匿名函数(Anonymous functions)和闭包函数(closures)
一:匿名函数 (在php5.3.0 或以上才能使用) php中的匿名函数(Anonymous functions), 也叫闭包函数(closures), 允许指定一个没有名称的函数.最常用的就是回调函 ...
- WordPress get_allowed_mime_types函数(wp-includes/functions.php)存在跨站脚本漏洞
漏洞版本: WordPress 3.6 漏洞描述: CVE ID:CVE-2013-5738 WordPress是一种使用PHP语言开发的博客平台,用户可以在支持PHP和MySQL数据库的服务器上架设 ...
- SQL Fundamentals || Single-Row Functions || 日期函数date functions
SQL Fundamentals || Oracle SQL语言 SQL Fundamentals: Using Single-Row Functions to Customize Output使 ...
- SQL Fundamentals || Single-Row Functions || 数字函数number functions
SQL Fundamentals || Oracle SQL语言 SQL Fundamentals: Using Single-Row Functions to Customize Output使用单 ...
- SQL Fundamentals || Single-Row Functions || 字符函数 character functions
SQL Fundamentals || Oracle SQL语言 SQL Fundamentals: Using Single-Row Functions to Customize Output使 ...
- js即时函数在异步回调中的运用
在编程中我们会接触到循环和异步编程的情况,这时异步回调执行逻辑就会出现问题.我们用setTimeout来模拟异步的: for(var i=0;i<3;i++){ setTimeout(funct ...
随机推荐
- ROS大型工程学习(一) 必须了解的基本文件
一.Cmake文件 阅读工程,首先点开CMakeLists 文件,会定义一些库和可执行文件.首先看可执行文件,rosrun的就是这个节点navigator add_executable(navigat ...
- 网卡绑定多个ip
现在我的树莓派上的wlan0的IP是192.168.31.237,之前通过双绞线连接时候eth0的ip是192.168.31.50 . 我就想啊,能不能把wlan0的ip设置成50.......... ...
- Docker部署Python应用程序
Docker部署Python应用程序 1. 单个py文件部署 生成Dockerfile 文件 插件用的豆瓣的镜像,,重置时间(容器的默认时间是UTC时间与宿主机的相差8小时). 文中需要三个插件(pe ...
- 吴裕雄 Bootstrap 前端框架开发——Bootstrap 字体图标(Glyphicons):glyphicon glyphicon-tags
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...
- Day 15:缓冲输入输出常用方法和小练习
以拷贝图片为例子,演示异常处理的代码: 拷贝一张图片 import java.io.File;import java.io.FileInputStream;import java.io.FileOut ...
- 19 01 15 js 尺寸相关 滚动事件
尺寸相关.滚动事件 1.获取和设置元素的尺寸 width().height() 获取元素width和height innerWidth().innerHeight() 包括padding的width和 ...
- Vulkan 开发学习资料汇总
开发资料汇总 1.API Reference 2.Vulkan Spec 有详细说明的pdf 文章 1.知乎Vulkan-高性能渲染 2.Life of a triangle - NVIDIA's l ...
- php语言注意点
PHP大小写问题 http://www.jb51.net/article/38579.htm 推荐大家始终坚持“大小写敏感”,遵循统一的代码规范.1. 变量名区分大小写 2. 函数名.方法名.类名不区 ...
- spring+springMVC+mybatis , 项目启动遇坑
github上找的框架组合例子 结合自己的数据库作为新项目开发. 但是项目启动时,tomcat启动失败: 检查不出错误. 于是改换maven引入jetty插件来启动项目, 结果在未改动的任何代码的情况 ...
- 实验吧Web-中-简单的sql注入之2
输入union select.order by这些关键字会提示SQLi detected! 说明对于关键字有防护 输入1 union也会提示SQLi detected! 但是如果去掉空格:1union ...