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下载,幻灯片和成绩单)