1. 什么是IIFE?
IIFE :Imdiately Invoked Function Expression 立即执行的函数表达式。
例如:
+function ($) { ... }(window.jQuery);
这种写法称为 IIFE。
2. 函数表达式和函数声明?
函数表达式(Function Expression):var test = function() {};
函数申明(Function Declaration):function test() {};
3. 函数声明
函数声明时必须有函数名。
function a(){ alert('Function declaration'); } a();
4. 函数表达式
函数表达式中的函数可以为匿名函数,也可以有函数名,但是该函数实际上不能直接使用,只能通过表达式左边的变量 a 来调用。例如:
var a = function(){ alert('Function expression'); } var b = new a();
通过一元操作符+变成了函数表达式。也可以使用 - ~ !等其他一元运算符或者括号,目的是为了引导解析器,指明运算符附近是一个表达式。以下是三种经典方式 :
+function () { ... }; (function () { ... }); void function() { ... };
函数表达式通过 末尾的() 来调用并运行。
+function () { }(); (funtion () { })();
也可以传递参数:
+function (x) { console.log(x); }(3); +function ($) { ... }(window.jQuery);
5. 使用IIFE的好处
提升性能、有利于压缩、避免冲突、依赖加载。
例如:
!function (win,d) { var title = "苏宁二手优品_放心的二手交易市场 –苏宁易购二手优品"; // 旧的页面title var newTitle = "10004-null-100039/null-苏宁二手优品/放心的二手交易市场/苏宁易购二手优品-null-null-null"; //新的页面规则 if (win.sndevice.isApp) { // 易购APP if (win.sndevice.isAndroid) { // android d.addEventListener("deviceready", function() { baseApi.setNewPageTitle(newTitle); }, false); } if (win.sndevice.isIOS) { // IOS d.addEventListener("SNNativeClientReady", function() { if (win.SNNativeClient.setNewPageTitle) { win.SNNativeClient.setNewPageTitle(title, newTitle); } }, false); } } }(window, document);