JavaScript嵌套function

我得到了一段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; } 

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

请说明一下。 谢谢

函数是JavaScript中的另一种types的variables(当然有一些细微差别)。 在另一个函数中创build一个函数会改变函数的作用域,就像改变一个variables的作用域一样。 这对于使用闭包来减less全球名称空间污染尤为重要。

在另一个函数中定义的函数将不能在函数外部访问,除非它们已经被附加到一个可以在函数之外访问的对象:

 function foo(doBar) { function bar() { console.log( 'bar' ); } function baz() { console.log( 'baz' ); } window.baz = baz; if ( doBar ) bar(); } 

在这个例子中,在foo函数运行之后,baz函数将被使用,因为它被覆盖了window.baz 。 除了foo函数中包含的作用域以外,bar函数将不可用。

作为一个不同的例子:

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

Fizz函数被devise成一个构造函数,当它运行时,它将一个buzz函数分配给新创build的对象。

它被称为封闭

基本上,其他function中定义的function只能在该function中访问。 但可能会因此而被传递,然后可能会调用这个结果。

这是一个非常强大的function。 你可以在这里看到更多的解释:

Archive.org上的javascript_closures_for_dummies.html镜像

 function x() {} 

相当于(或非常相似)

 var x = function() {} 

除非我错了。

所以没有什么可笑的事情发生。

函数实例化在函数内部和外部都是允许的。 在这些函数内部,就像variables一样,嵌套函数是局部的,因此不能从外部范围获得。

 function foo() { function bar() { return 1; } return bar(); } 

foo在其内部操作bar 。 除非在外部范围内定义,否则从外部范围不能触及。

所以这不起作用:

 function foo() { function bar() { return 1; } } bar(); // throws error: bar is not defined 

当你在一个函数中声明一个函数时,内部函数只能在声明它的范围中使用,或者在你的情况下, pad2只能在dmy作用域中调用。

dmy中存在的所有variables都可以在pad2中看到,但不会以pad2的方式发生:D

在Javascript(和许多语言)中,在函数内部使用函数是完全正常的。

花时间学习语言,不要以与已知的类似的方式使用它。 我build议观看道格拉斯·克罗克福德(Douglas Crockford)关于Javascript的YUI系列演讲,特别关注第三幕:终极作品 (链接到video下载,幻灯片和成绩单)