JavaScript 函数:闭包与函数特性深入解析
1. 立即调用函数表达式(IIFE)
在 JavaScript 里,有一种常见的技术是在单个表达式中定义并调用函数,也就是立即调用函数表达式(IIFE)。示例代码如下:
(function() {
// 代码块放这里
}());
这里开头的括号是必需的。要是没有它,JavaScript 解释器会把 function 关键字解析成函数声明语句;有了括号,解释器就能正确把它识别为函数定义表达式。同时,这个括号也有助于开发者识别函数是要立即调用,而非后续使用。
当在命名空间函数里定义一个或多个函数,使用该命名空间内的变量,再把这些函数作为命名空间函数的返回值返回时,函数作为命名空间的用法就很有用了。这类函数就是闭包,下面会详细介绍。
2. 闭包
2.1 词法作用域与闭包概念
JavaScript 和多数现代编程语言一样,采用词法作用域。这意味着函数执行时使用的是定义时的变量作用域,而非调用时的作用域。为实现词法作用域,JavaScript 函数对象的内部状态不仅要包含函数代码,还得有对函数定义所在作用域的引用。在计算机科学中,函数对象和其变量解析所在的作用域(一组变量绑定)的组合就叫闭包。
从技术上讲,所有 JavaScript 函数都是闭包,但多数函数在定义的作用域内被调用,所以闭包的影响通常不明显。当闭包在定义作用域之外被调用时,就会变得有趣,这常见于嵌套函数对象从定义它的函数中返回的情况。
JavaScript函数:闭包与特性深度解析
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



