一尘不染

JavaScript嵌套函数

javascript

我得到了一段我不明白的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()吗?

请给它一些照明。谢谢


阅读 457

收藏
2020-05-01

共1个答案

一尘不染

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

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

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

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

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

在此示例中,baz函数将foo在运行后可用,因为它已被覆盖window.baz。除foo函数中包含的作用域外,bar函数将无法用于任何上下文。

作为另一个示例:

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

Fizz函数被设计为构造函数,以便在运行时将buzz函数分配给新创建的对象。

2020-05-01