本来是想建立一个合集的。

但由于图灵社区改版禁止新建,就只能通过普通的文章进行发布。

一般的JavaScript函数有三种写法。

1.函数关键字,也叫函数声明语句写法

function foo(){}; foo();

2.函数字面量,也叫函数表达式写法

var foo = function(){}; foo();

3.funtion()构造函数

var foo = new function(): foo();

有时需要在定义函数之后,立即调用该函数。这种函数就叫做立即执行函数,全称为立即调用的函数表达式IIFE(Imdiately Invoked Function Expression)。 通过立即调用的函数表达式,能够实现块级作用域的效果。

JavaScript引擎规定,如果function关键字出现在行首,一律解释成函数声明语句,而且声明语句必须要有一个函数名。所以如下的代码demo会报错。

function () {}; //Uncaught SyntaxError: Unexpected token (

正确的写法是给函数声明语句提供一个函数名。

function foo() {}; //undefined

接下来将函数声明语句与JavaScript分组操作符进行组合,看上去这样的组合好像并没有什么意义,并且会抛出一个错误:

function foo() {} (); //Uncaught SyntaxError: Unexpected token )

错误在于JavaScript分组操作符需要指定一个值,不能为空。

正确的组合写法:

function foo() {} (0);//0

function foo() {}; (0); //0 两种写法等价。

这样也仅仅是实现了函数声明语句与不报错的分组操作符的组合。

所以需要将函数声明语句改成函数表达式写法,将function使用分组操作符进行组合。这样就不需要再指定一个函数名。这个表达式将会在加载网页时立即执行,而不需要单独调用函数。执行后,函数内代码块声明的变量将只在局部作用域内有效。无法被外层访问到。

(function () {} () );

或者

(function () {}) ();

在ECMAScript6中,由于块级作用域的出现,实际上使得获得广泛应用的立即执行函数表达式(IIFE)不再必要了。

// IIFE 写法 (function () { var tmp = 0; }());

// 块级作用域写法 { let tmp = 0; }

参考来源:

深入理解闭包系列第三篇——IIFE

ECMAScript 6 入门

任务一:零基础JavaScript编码(一)

评论

本文目前还没有评论……

我要评论

需要登录后才能发言
登录未成功,请修改提交。