我不明白以下javascript代码的重要性:



我不明白以下javascript代码的意义:

var func = f()
    func() 

有人能向我解释一下吗?当然,我不是javascript方面的专家。我在网上找到的完整代码是:

    var a = 1
function f() {
  function g() {
    alert(a)
  }
  return g 
}
var func = f()
func() // 1

它试图说明闭包,词法环境。任何帮助都将不胜感激。我在上面找到的http://javascript.info/tutorial/closures

  1. function f()声明了一个函数。这只是意味着您可以稍后调用它,但代码本身不会执行。

  2. var func = f()调用函数f,并将其结果分配给变量func。由于f returns g,func等于g(触发警报)。

  3. 最后,func()调用分配给它的函数,并显示警报。

这里需要注意的重要一点是函数的声明和调用之间的不同。func本身只是一个分配了函数的变量,其中func()实际运行函数。如果有帮助的话,您可以将func视为指向函数的"指针"(尽管事实并非如此)。正如其他人所指出的,这并不是闭包的最佳示例,而是函数是Javascript中的对象这一事实。

f()的调用返回函数g并将其赋值给变量func

呼叫CCD_ 15然后执行显示警报消息的CCD_。

实际上,这并不是说明闭包的最佳示例。它只是没有创造它。

为了在这种情况下适当地说明闭包,代码应该如下:

function f() {
  var a = 1
  function g() {
    alert(a)
  }
  return g 
}
var func = f();
func() // 1

关键是,当函数f被执行时,它返回函数g,其中包含对被调用函数f的执行上下文的引用(它包含函数内部声明的所有变量、传递的参数、作用域链等)。通常,在执行垃圾收集器之后,应该从内存中删除执行上下文,但返回的函数g保留对它的引用,因此不会删除它。

当调用函数func时,它会从所谓的闭包访问变量a并向其发出警报,但再也没有其他方法可以访问此变量了。

如果你不想深入了解那里发生了什么,我建议你读这篇文章。它相当古老,但对主题的解释非常详细。

我最近发现的另一个好的更容易理解,所以你可以从它开始,然后回到我提到的第一个。

希望能帮一点忙。

最新更新