原文:javascript立即调用的函数表达式N种写法(第二篇)

  上一篇博客我谈到将函数声明转换为函数表达式最常见的一种写法是:通过括号()将匿名函数声明转换为函数表达式即(function(){})();

言外之意就是还有其他方式,记住:任何消除函数声明和函数表达式间歧义的方法,都可以被解析器正确识别!它们可以分为5类,超过10多种:

(function(){})(); //最常见的写法 下文没特殊指明就是指它
(function(){}); //容易与上面的混淆
[function()()]; //一元运算符
~function(){};
+function(){};
-function(){};
!function(){}; //常见于一些第3方代码 //关键字
delete function() {}();
typeof function() {}();
void function() {}();
new function() {}();
new function() {}; var f = function() {}(); 1, function() {}();
1 ^ function() {}();
1 > function() {}();
1 && function(){}();
//...

  当然,它们之间也有性能的差异:new永远是最慢的,+-在chrome速度惊人,常见的()和!在各浏览器中的表现也算上乘,另外+-比()少一个字符。

  解惑:我们可能经常看到一些插件前面会加一个;分号,我的理解如下:

glue()

//插件
(function(){
//.....前面应该加;分号
})();
//Uncaught TypeError: undefined is not a function

glue()函数和插件单独执行是没有错误的,但是当glue()与插件通过某种方式合并在一起了就会报错。所以我们可以这样去写:

;(function(){
//省略一段代码
})();
--------------------------
;!function(){
//省略一段代码
}();
---------------------------
;+function(){
//省略一段代码
}();
----------------------------
//等等

  以上学会可当装逼之用(~><~),同时再也不会为看不懂别人的代码而烦恼了!

javascript立即调用的函数表达式N种写法(第二篇)的更多相关文章

  1. 深入理解javascript系列(4):立即调用的函数表达式

    本文来自汤姆大叔 前言 大家学JavaScript的时候,经常遇到自执行匿名函数的代码,今天我们主要就来想想说一下自执行. 在详细了解这个之前,我们来谈了解一下“自执行”这个叫法,本文对这个功能的叫法 ...

  2. [JS]深入理解JavaScript系列(4):立即调用的函数表达式

    转自:汤姆大叔的博客 前言 大家学JavaScript的时候,经常遇到自执行匿名函数的代码,今天我们主要就来想想说一下自执行.在详细了解这个之前,我们来谈了解一下"自执行"这个叫法 ...

  3. <深入理解JavaScript>学习笔记(4)_立即调用的函数表达式

    前言 大家学JavaScript的时候,经常遇到自执行匿名函数的代码,今天我们主要就来想想说一下自执行.(小菜理解:的确看到好多,之前都不知道这是自执行匿名函数) 在详细了解这个之前,我们来谈了解一下 ...

  4. [Effective JavaScript 笔记] 第13条:使用立即调用的函数表达式创建局部作用域

    function wrapElements(a){ var res=[],i,n; for(i=0,n=a.length;i<n;i++){ res[i]=function(){return a ...

  5. 学习汤姆大叔《深入理解JavaScript系列》有感(1) —— 立即调用的函数表达式

    一. 下面代码用于理解函数的声明和调用. function makeCounter() { // 只能在makeCounter内部访问i var i = 0; return function () { ...

  6. js 匿名函数-立即调用的函数表达式

    先提个问题, 单独写匿名函数为什么报错?return 匿名函数 为什么不报错? 如图: 第二种情况在 f 还没有执行的时候,就报错了,,,当然这得归因于函数声明语句声明提前(发生在代码执行之前)的原因 ...

  7. 关于立即调用的函数表达式(IIFE)

    在 JavaScript 中,圆括号 () 是一种运算符,跟在函数名之后,表示调用该函数.比如,print() 就表示调用 print 函数 有时,我们需要在定义函数之后,立即调用该函数,例如: fu ...

  8. swap函数的四种写法

    swap 函数的四种写法 (1)经典型 --- 嫁衣法 void swap(int *a, int *b) { int temp; temp = *a; *a = *b; *b = temp; } ( ...

  9. swap()函数的几种写法及优劣

    试用几种方法实现swap函数,比较效率高低. 首先说结果,最快的是赋值交换. 原因分析 gcc开启O2优化后,三个函数的汇编代码一样.是的,除了第一行的文件名,一模一样. 附代码 void swap1 ...

随机推荐

  1. C++输出IP地址段内的合法地址

    近半年的Intel实习生活快要结束了.马上要找工作了,这段时间打算把以前的知识复习复习,顺便在这里记录一下.这是当时去Intel面试的时候,面试官问的一道题.当时因为时间关系,只让我提供一个思路,并没 ...

  2. PC结束 Spark 二次开发 收到自己主动,并允许好友请求

    本次Spark二次开发是为了客服模块的开发, 能让用户一旦点击该客服则直接自己主动加入好友.而客服放则需自己主动加入好友,不同弹出对话框进行允许,这方便的广大客服. 如今废话不多说,直接上代码. pa ...

  3. UVALive - 3263 That Nice Euler Circuit (几何)

    UVALive - 3263 That Nice Euler Circuit (几何) ACM 题目地址:  UVALive - 3263 That Nice Euler Circuit 题意:  给 ...

  4. 深入浅出学习Hibernate框架(一):从实例入手初识Hibernate框架

    这篇博客是hibernate学习的第一篇,主要简介hibernate框架,之后简单说一下hibernate的文件夹结构,最后写一个简单的hibernate实例.通过这三步来简单的认识一下hiberna ...

  5. JSP简单的练习-使用JDOM阅读xml文件

    <%@ page contentType="text/html; charset=gb2312" language="java" %> <%@ ...

  6. UVa 11790 - Murcia&#39;s Skyline

    称号:给你一个行长度的建设和高度,我们祈求最长的和下降的高度. 分析:dp,最大上升子. 说明:具有长度,不能直接优化队列单调. #include <iostream> #include ...

  7. nodejs安装:nodejs入门

    nodejs开篇 前几天看到好多关于node 的帖子没有单独说明node安装的文章~ 特发此篇 总结一下平时在windows上nodejs的安装... 1.js来搞前后端分离是nodejs的一大特点, ...

  8. Git 命令速查表

    Git 命令速查表 1.常用的Git命令 命令 简要说明 git add 添加至暂存区 git add-interactive 交互式添加 git apply 应用补丁 git am 应用邮件格式补丁 ...

  9. android EditText问题多行文本输入

    一旦习惯了网络和swing在文本框输入,我们Android突然缺乏这样的管制,刚开始使用它是相当费力.为了要实现多行文本输入框和显示.逐一克服这些问题,如下面: 1. 怎么做EditText显示区域在 ...

  10. Eclipse UML 工具 ObjectAid 介绍

    概要 本文介绍如何使用 ObjectAid(http://www.objectaid.com/) UML Explorer 创建 UML 图,高速阅读代码. 安装 ObjectAid ObjectAi ...