JavaScript 嵌套函数

2022-08-30 05:28:25

我得到了一段javascript的代码,我只是不明白:

function dmy(d) {
    function pad2(n) {
        return (n < 10) ? '0' + n : n;
    }

    return pad2(d.getUTCDate()) + '/' +
       pad2(d.getUTCMonth() + 1) + '/' +
       d.getUTCFullYear();
}

function outerFunc(base) {
    var punc = "!";

    //inner function
    function returnString(ext) {
       return base + ext + punc;
    }

    return returnString;
}

如何在另一个函数中定义一个函数?我们可以从 my() 函数外部调用 pad2() 吗?

请给它放一些光。谢谢


答案 1

函数是JavaScript中另一种类型的变量(当然有一些细微差别)。在另一个函数中创建一个函数会更改该函数的作用域,其方式与更改变量的作用域的方式相同。这对于与闭包一起使用以减少全局命名空间总污染尤其重要。

在另一个函数中定义的函数将无法在函数外部访问,除非它们已附加到可在函数外部访问的对象:

function foo(doBar)
{
  function bar()
  {
    console.log( 'bar' );
  }

  function baz()
  {
    console.log( 'baz' );
  }

  window.baz = baz;
  if ( doBar ) bar();
}

在此示例中,baz 函数在函数运行后将可供使用,因为它已被覆盖。条形图函数将不可用于该函数中包含的范围以外的任何上下文。foowindow.bazfoo

作为另一个例子:

function Fizz(qux)
{
  this.buzz = function(){
    console.log( qux );
  };
}

该函数被设计为构造函数,以便在运行时将函数分配给新创建的对象。也就是说,你可以像这样使用它:Fizzbuzz

const obj = new Fizz();
obj.buzz();

或者更简洁地说(如果你在调用后不需要保留对象):buzz

new Fizz().buzz();

答案 2

它被称为闭包

基本上,在其他函数中定义的函数只能在此函数中访问。但可能会作为结果传递,然后可以调用此结果。

这是一个非常强大的功能。您可以在此处查看更多说明:

Archive.org 上的javascript_closures_for_dummies.html镜