JS中的闭包疑问:连续双括号的疑惑
作为一名从C++/Java转向JS的开发者,想必你对JS中的闭包概念感到困惑,尤其是不理解为什么需要连续使用两个括号。
首先,函数后面的圆括号用于调用该函数。因此,在声明函数时在圆括号中编写的是立即调用函数表达式(IIFE)。每个函数都会生成一个新的作用域。
当一个函数执行完毕后,它仍然可以访问之前创建的变量,这就是闭包的本质。然而,并非所有声明的函数都是闭包。只有当函数保持对外部作用域变量的引用时,它才会形成闭包。
例如,在第一个代码片段中,将迭代器函数括起来并添加参数(i),然后用外部括号(0)调用它,将0作为i的值传递给函数。函数中的变量i引用了外部作用域中的a变量,因此形成了闭包。
在第二个代码片段中,内部函数创建了一个新的作用域,其中包含一个与外部a变量同名的变量。尽管内部函数执行后外部作用域的a变量的值没有发生变化,但函数仍然保留对其的引用,因此这也是一个闭包。
值得注意的是,连续的两个括号()()是闭包的标准形式,它有助于识别并理解闭包的概念。