js立即执行函数

 

一、立即执行函数方式

js立即执行函数可以让你的函数在创建后立即执行,可以让你的函数在定义后立即被执行,这种模式本质上就是函数表达式(命名的或者匿名的),在创建后立即执行。

方式1、最前最后加括号

(function(){alert(1);}());

方式2、function外面加括号

(function(){alert(1);})();

方式3、function前面加运算符,常见的是!与void

!function(){alert(1);}(); void function(){alert(2);}();

错误方式1:

function(){ /* code */ }(); // SyntaxError: Unexpected token (

因为在解析器解析全局的function或者function内部function关键字的时候,默认是认为function声明,而不是function表达式,如果你不显示告诉编译器,它默认会声明成一个缺少名字的function,并且抛出一个语法错误信息,因为function声明需要一个名字。

错误方式2:

但是如果你在括弧()里传入一个表达式,将不会有异常抛出
// 但是foo函数依然不会执行

function foo(){ /* code */ }( 1 );

// 因为它完全等价于下面这个代码,一个function声明后面,又声明了一个毫无关系的表达式:

function foo(){ /* code */ }
( 1 );

二、立即执行函数的参数

1)可以给立即执行函数传递参数,例如

(function(who, where) {

 console.log("I am" + who + " come from" + where);

} ("Amy", "China"));

注:通常你不应该给立即执行函数传递太多的函数,因为它很快会成为一个负担——为了理解代码是如何工作的,你不得不经常上下滚动源代码。

2)有时我们会看到传入的参数是window, jQuery

为什么要传入jquery

jQuery 被应用在成千上万的 JavaScript 程序中,必须确保 jQuery 创建的变量不能和导入他的程序所使用的变量发生冲突。

为什么要传入window

通过传入 window 变量,使得 window 由全局变量变为局部变量,当在 jQuery 代码块中访问 window 时,不需要将作用域链回退到顶层作用域,这样可以更快的访问 window;这还不是关键所在,更重要的是,将 window 作为参数传入,可以在压缩代码时进行优化

 

 

 

 

原文地址:https://www.cnblogs.com/wangdan0915/p/7852608.html