Javascript代码处理流程(函数内的函数)

时间:2011-03-20 19:59:35

标签: javascript

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

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

将在主函数执行时自动执行f1吗?内部主要f1的定义(开始或结束)是否重要?处理其他函数中的函数时有哪些一般规则?

3 个答案:

答案 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
}

试用:http://jsfiddle.net/4kuJM/1/