笔记:IIFE 立即执行的函数表达式 +function ($) { }(window.jQuery);
在Bootstrap源码(具体请看《Bootstrap源码解析1》)和其他jQuery插件经常看到如下的写法:
+function ($) { }(window.jQuery);
这种写法称为:IIFE 2(Imdiately InvokedFunction Expression 立即执行的函数表达式)。
解析:
先弄清函数表达式(function expression)和 函数声明(function declaration)的区别:
函数表达式 var test = function() {};
函数声明 function test() {};
* 函数表达式 中的函数可以为匿名函数,也可以有函数名,但是该函数实际上不能直接使用,只能通过表达式左边的变量 test 来调用。
* 函数声明 时必须有函数名。
匿名函数通过一元操作符+变成了函数表达式。也可以使用 - ~ !等其他一元运算符或者括号,目的是为了引导解析器,指明运算符附近是一个表达式。
函数表达式通过 末尾的() 来调用并运行。就是一个IIFE。
* 传参,为了避免$与其他库或者模板申明冲突,window.jQuery 作为参数传递。
* 各种符号性能对比4结果:
由图可见+性能最差(在Firefox下差距更明显),其他几种都差不多。不过IIFE只执行一遍,对js执行效率的影响特别小,使用哪种还是看个人爱好。
Other:
01. jQuery优化
一段看上去写法有点像的代码。大部分项目用这段代码做作用域,这段代码会在DOM加载完成时初始化jQuery代码。
$(function(){ });
这种写法等同于
$(document).ready(function(){
// 在DOM加载完成时初始化jQuery代码。
});
区别于
$(window).load(function(){
// 在图片等媒体文件加载完成时,初始化jQuery代码。
});
结合IIFE的最佳实践,更好的写法是,立即执行document ready
+function ($) {
$(function(){ })
}(window.jQuery)
02. 在Bootstrap和其他插件中经常看到如下写法:
+function ($) {
"use strict"; }(window.jQuery);
关于字符串"use strict";请看严格模式 5
参考出处:http://suqing.iteye.com/blog/1981591
笔记:IIFE 立即执行的函数表达式 +function ($) { }(window.jQuery);的更多相关文章
- [javascript]IIFE立即执行的函数表达式
近况:最近一直忙着找实习没有更新,不过学习还是在继续的.最近在写Node.js又稍带把javascript的角落知识捡了一遍,过半个月打算去看看python和一些CSS深层的书和博客.工作找的还好,拿 ...
- IIFE 立即执行的函数表达式
介绍IIFE IIFE的性能 使用IIFE的好处 IIFE最佳实践 jQuery优化 在Bootstrap源码(具体请看<Bootstrap源码解析>)和其他jQuery插件经常看到如下的 ...
- JS---------IIFE(Imdiately Invoked Function Expression 立即执行的函数表达式)
+function($){}(jQuery); 今天看到js代码里面有这个格式的代码,不知道啥意思,就去查了一下,我也是js小白.首先前面的+号,这个不是固定非要写+号,只要写一级运算符都可以.目的是 ...
- JavaScript:立即执行的函数表达式
先要理解清楚几个概念: 以下转自:http://www.cnblogs.com/TomXu/archive/2011/12/31/2289423.html 问题的核心 当你声明类似functio ...
- <深入理解JavaScript>学习笔记(2)_揭秘命名函数表达式
写在前面的话 注:本文是拜读了 深入理解JavaScript 之后深有感悟,故做次笔记方便之后查看. 感觉这章的内容有点深奥....略难懂啊. 先坐下笔记,加深一下印象吧. 我主要记一下自己感觉有用的 ...
- JS 立即执行的函数表达式(function)写法
1. 正确的写法 对于JavaScript 来说,括弧()里面不能包含语句,所以在这一点上,解析器在解析function关键字的时候,会将相应的代码解析成function表达式,而不是function ...
- JS学习笔记3_函数表达式
1.函数表达式与函数声明的区别 函数声明有“提升”(hoisting)的特性,而函数表达式没有.也就是说,函数声明会在加载代码时被预先加载到context中,而函数表达式只有在执行表达式语句时才会被加 ...
- 立即执行函数表达式(IIFE)
原文地址:benalman.com/news/2010/11/immediately-invoked-function-expression/ 译者:nzbin 也许你还没有注意到,我是一个对术语比较 ...
- javascript模块化编程-详解立即执行函数表达式IIFE
一.IIFE解释 全拼Imdiately Invoked Function Expression,立即执行的函数表达式. 像如下的代码所示,就是一个匿名立即执行函数: (function(windo ...
随机推荐
- Excel上传找到错误数据类型
一:查询数据库表中字段的类型语句 SELECT CASE WHEN col.colorder = 1 THEN obj.name ELSE '' END AS 表名, col.colorder AS ...
- (O)阻止默认事件和阻止冒泡的应用场景
场景1:阻止默认事件 比如这样的一个需求 点击取消a标签按钮的时候会触发一些js动作,但是不能让这个a标签产生跳转行为, 所以需要在点击取消的时候 阻止冒泡,防止其跳转. <a id='ca ...
- mysql 压缩方法
show global variables like 'innodb_file_format%';alter table t row_format=COMPRESSED;
- POJ 2762 Going from u to v or from v to u?- Tarjan
Description 判断一个有向图是否对于任意两点 $x$, $y$ 都有一条路径使$x - >y$或 $y - >x$ Solution 对于一个强联通分量内的点 都是可以互相到达 ...
- EXISTS 和 IN 的区别
exists子句的用法 select * from 表1 where exists (select * from 表2 where 表1.列名=表2.列名); exists子句返回的结果并不是从数据库 ...
- redis集群中的主从复制架构(3主3从)
架构图如下 首先开启6个实例,这里为了演示方便,只是在一个linux上开启了6个redis实例 6380 (主) 6480 (从) 6381(主) 6481(从) 6382(主) 6482 ...
- Ajax在jQuery中的应用 (4)向jsp提交表单数据
ajax技术带给我们的是良好的用户体验,同时,使用jquery可以简化开发,提高工作效率. 下面就介绍一下大致的开发步骤. 工具/原料 本文中使用的是 jquery-1.3.2.min.js 方法/步 ...
- PHP filter 函数FILTER_CALLBACK 过滤数据
<?php function convertSpace($string) { return str_replace(" ", "_", $string); ...
- wireshark源码分析二
一.源代码结构 在wireshark源代码根目录下,可以看到以下子目录: 1)物理结构 其中,epan文件夹负责所有网络协议识别工作,plugins里面存放了wireshark所有插件,gtk ...
- java ajax请求后台并获取到返回值
js: $.ajax({ url : '../Islogin.do', type : 'get', cache : false, dataType : 'json', success : functi ...