Javascript代码处理流(函数中的函数)

Javascript代码处理流(函数中的函数),javascript,Javascript,所以我的问题是,我最近了解到javascript允许您在另一个函数中定义函数。但是,我注意到其他函数中的此类函数并不总是显式调用。举个例子, function main() { function f1() { ... } ... } f1是否会在主功能执行时自动执行?在主f1中定义的位置(起点或终点)是否重要?在处理其他函数中的函数时,一般规则是什么?在本例中,f1仅定义,不调用。仅当调用或分配给稍后调用的某个字段/变量时,才会执行该命令 至于位置,它可以在任何地方定义

所以我的问题是,我最近了解到javascript允许您在另一个函数中定义函数。但是,我注意到其他函数中的此类函数并不总是显式调用。举个例子,

function main()
{
  function f1()
  {
    ...
  }
  ...
}

f1是否会在主功能执行时自动执行?在主f1中定义的位置(起点或终点)是否重要?在处理其他函数中的函数时,一般规则是什么?

在本例中,
f1
仅定义,不调用。仅当调用或分配给稍后调用的某个字段/变量时,才会执行该命令


至于位置,它可以在任何地方定义——函数定义总是在作用域中发现的第一件事,即使它们是在最后定义的。

函数不是自动执行的,只在外部函数的作用域内可用,因此您无法访问
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
}
函数是表达式还是声明时有一些微妙的规则,这对函数作用域可能很有帮助。

现在f1会自动执行并更改
a

function main(){
  var a = 1;
  (function f1(){
    a = 2;
  })()
  alert(a)  // 2
}
试用:

函数f1(){}是一个函数声明(复制粘贴错误?;)