所以我的问题是,我最近了解到javascript允许你在另一个函数中定义一个函数。但是,我注意到其他函数中的这些函数并不总是被显式调用。给出这个例子,
function main()
{
function f1()
{
...
}
...
}
将在主函数执行时自动执行f1吗?内部主要f1的定义(开始或结束)是否重要?处理其他函数中的函数时有哪些一般规则?
答案 0 :(得分:2)
该功能不会自动执行,只能在外部功能的范围内使用,因此您无权访问f1
之外的main
,除非已通过其他方式公开。要执行f1
,请在代码中调用它。
function main() {
function f1() { .. }
f1(); // calling f1
}
如果函数是函数声明,那么即使在函数声明定义之前,您也可以在函数内的任何位置使用它。如果它是一个函数表达式,那么它只能在定义之后使用。考虑如果我们在定义之前尝试使用函数表达式会发生什么,
function main() {
f1(); // TypeError: undefined is not a function
var f1 = function() { }; // Function Expression
}
如果它是一个函数声明,那就可以了,
function main() {
f1(); // No errors
function f1() { }; // Function Declaration
}
关于函数是表达式与声明的时间有一些细微的规则,关于函数作用域的article可能会有所帮助。
答案 1 :(得分:0)
在此示例中,f1
仅定义,而不是调用。它仅在被调用或分配给某个字段/变量时执行,以便稍后调用。
至于位置,它可以在任何地方定义 - 函数定义总是在作用域中发现的第一件事,即使它们是在最后定义的。
答案 2 :(得分:0)
现在f1 自动执行并更改a
:
function main(){
var a = 1;
(function f1(){
a = 2;
})()
alert(a) // 2
}