摘要:所以那些匿名函数附近使用括号或一些一元运算符的惯用法,就是来引导解析器,指明运算符附近是一个表达式。
Immediately-invoked Function Expression(IIFE,立即调用函数),简单的理解就是定义完成函数之后立即执行。因此有时候也会被称为“自执行的匿名函数”(self-executing anonymous function)。
IIFE的叫法最早见于Ben Alman的文章。文章中Ben Alman 已经解释得很清楚了,希望定义自执行函数式常见的语法错误有两种:
1) function (){ }()
期望是立即调用一个匿名函数表达式,结果是进行了函数声明,函数声明必须要有标识符做为函数名称。
2) function g(){ }()
期望是立即调用一个具名函数表达式,结果是声明了函数 g。末尾的括号作为分组运算符,必须要提供表达式做为参数。
所以那些匿名函数附近使用括号或一些一元运算符的惯用法,就是来引导解析器,指明运算符附近是一个表达式。
按照这个理解,可以举出五类,超过十几种的让匿名函数表达式立即调用的写法:
1)使用括号
( function() {}() ); ( function() {} )(); [ function() {}() ];
2)使用一元操作符
~ function() {}(); ! function() {}(); + function() {}(); - function() {}();
3)使用void等操作符
delete function() {}(); typeof function() {}(); void function() {}();
4)使用表达式
var i = function(){ return 10; }(); 14.true && function(){ /* code */ }(); 15.0, function(){ /* code */ }(); 1 ^ function() {}(); 1 > function() {}();
5)使用new关键字
new function(){ /* code */ } 31.new function(){ /* code */ }() //如果没有参数,最后的()就不需要了
但是总体来说,比较常见的是如下三种写法:
// Crockford"s preference - parens on the inside (function() { console.log("Welcome to the Internet. Please follow me."); }()); (function() { console.log("Welcome to the Internet. Please follow me."); })(); !function() { console.log("Welcome to the Internet. Please follow me."); }();
其实讨论IIFE的多少种写法多少和研究茴香豆的“茴”字有几种写法一样无聊,但其实不无用处,至少在阅读别人的代码时见到这样的写法不至于不知所云,抑或可以拿出去和小伙伴们装装,顿时觉得逼格提升不少。
参考资料:
http://benalman.com/news/2010/11/immediately-invoked-function-expression/(中文译文:http://www.cnblogs.com/TomXu/archive/2011/12/31/2289423.html)
http://www.elijahmanor.com/angry-birds-of-javascript-red-bird-iife/(中文译文:http://nuysoft.com/2013/04/15/angry-birds-of-javascript-red-bird-iife/Immediately-invoked%20Function%20Expression)
http://www.zhihu.com/question/20249179
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/78140.html
摘要:将匿名函数赋予一个变量,叫函数表达式,这是最常见的函数表达式语法形式。组成这是一个被称为自执行匿名函数的设计模式,主要包含两部分。 一、函数声明&函数表达式 1.1 函数声明 (函数语句) showImg(https://segmentfault.com/img/bVbbqvT?w=278&h=166); (1)使用 function 关键字声明一个函数,再指定一个函数名,叫函数声明。...
摘要:而且,如果你想跳过这里,你可以直接跳到立即调用函数表达式进行阅读,但是我建议你读完整篇文章。当圆括号包裹函数时,它会默认将函数作为表达式去解析,而不是函数声明。什么是呢它使一个被立即调用的函数表达式。一旦命名,函数将不再匿名。 原文:http://benalman.com/news/2010/11/immediately-invoked-function-expression/#iif...
摘要:第一部分请点击快速掌握面试基础知识一闭包闭包由一个函数以及该函数定义是所在的环境组成。当匿名函数执行的时候,的值为。这个问题可以改用后面会介绍方法来解决,通过对每一个匿名函数构建独立的外部作用域来实现。 译者按: 总结了大量JavaScript基本知识点,很有用! 原文: The Definitive JavaScript Handbook for your next develope...
摘要:另外,如果你想跳过这里,你可以直接跳到立即调用函数表达式进行阅读,但是我建议你读完整篇文章。当圆括号包裹函数时,它会默认将函数作为表达式去解析,而不是函数声明。 原文:Immediately-Invoked Function Expression (IIFE) by Ben Alman原译:立即执行函数 by Murphywuwu改增内容: by blanu 也许你没有注意到,我是一个...
摘要:需要注意的是,及更早的浏览器不支持第一种语法中向延迟函数传递额外参数的功能。如果在不改变递归模式的前提下修善这段代码解决方案加入定时器题目四考察和系列解释立即的对象,是在本轮事件循环的结束时,而不是在下一轮事件循环的开始时。 前言:setTimeout是JavaScript中常见的一个window对象方法,本文将介绍关于它的一些基础知识和易出错的地方。 1、基础知识 作用:setTim...
阅读 1457·2021-11-24 09:39
阅读 1774·2021-11-22 15:25
阅读 3728·2021-11-19 09:40
阅读 3283·2021-09-22 15:31
阅读 1287·2021-07-29 13:49
阅读 1191·2019-08-26 11:59
阅读 1307·2019-08-26 11:39
阅读 918·2019-08-26 11:00