发表于: 2020-11-17 23:49:04
1 2144
今天完成的事情:
闭包是什么:
闭包是指有权访问另一个函数作用域中的变量的函数;
如何从外部读取函数内部的变量?
假定有一个函数f1,内部有一个函数f2可以访问f1内部变量params,只需要把f2作为返回值,就可以f1外部访问f1内部变量
这是由于f1是f2的父元素,f2被赋给了一个全局变量,f2始终存在内存中
运行这段代码的效果和之前 init() 函数的示例完全一样。其中不同的地方(也是有意思的地方)在于内部函数 displayName() 在执行前,从外部函数返回。
第一眼看上去,也许不能直观地看出这段代码能够正常运行。在一些编程语言中,一个函数中的局部变量仅存在于此函数的执行期间。一旦 makeFunc() 执行完毕,你可能会认为 name 变量将不能再被访问。然而,因为代码仍按预期运行,所以在 JavaScript 中情况显然与此不同。
原因在于,JavaScript中的函数会形成了闭包。 闭包是由函数以及声明该函数的词法环境组合而成的。该环境包含了这个闭包创建时作用域内的任何局部变量。在本例子中,myFunc 是执行 makeFunc 时创建的 displayName 函数实例的引用。displayName 的实例维持了一个对它的词法环境(变量 name 存在于其中)的引用。因此,当 myFunc 被调用时,变量 name 仍然可用,其值 Mozilla 就被传递到alert中。
评论