Tho*_*mas 91 javascript nested-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;
}
Run Code Online (Sandbox Code Playgroud)
如何在另一个函数中定义函数?我们可以从my()函数外部调用pad2()吗?
请点亮一下.谢谢
zzz*_*Bov 136
函数是JavaScript中的另一种变量(当然还有一些细微差别).在另一个函数中创建函数会改变函数的范围,就像更改变量范围一样.这对于使用闭包来减少总体全局命名空间污染尤为重要.
在函数外部定义的函数将无法在函数外部访问,除非它们已附加到函数外部可访问的对象:
function foo(doBar)
{
function bar()
{
console.log( 'bar' );
}
function baz()
{
console.log( 'baz' );
}
window.baz = baz;
if ( doBar ) bar();
}
Run Code Online (Sandbox Code Playgroud)
在此示例中,baz函数将在foo函数运行后可用,因为它已被覆盖window.baz.除了函数中包含的范围之外,bar函数将不可用于任何上下文foo.
作为一个不同的例子:
function Fizz(qux)
{
this.buzz = function(){
console.log( qux );
};
}
Run Code Online (Sandbox Code Playgroud)
该Fizz函数被设计为构造函数,以便在运行时为buzz新创建的对象分配函数.
Tad*_*eck 32
它被称为封闭.
基本上,其他函数中定义的函数只能在此函数中访问.但是可以作为结果传递,然后可以调用此结果.
这是一个非常强大的功能.你可以在这里看到更多解释:
Archive.org上的javascript_closures_for_dummies.html镜像
And*_*eas 13
function x() {}
Run Code Online (Sandbox Code Playgroud)
等同于(或非常相似)
var x = function() {}
Run Code Online (Sandbox Code Playgroud)
除非我弄错了.
所以没有什么好玩的.
函数内部和外部允许函数实例化.在这些函数中,就像变量一样,嵌套函数是局部函数,因此无法从外部作用域获取.
function foo() {
function bar() {
return 1;
}
return bar();
}
Run Code Online (Sandbox Code Playgroud)
foobar在自己内部操纵.bar除非在外部范围内定义,否则不能从外部范围触及.
所以这不起作用:
function foo() {
function bar() {
return 1;
}
}
bar(); // throws error: bar is not defined
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
183681 次 |
| 最近记录: |