3

我发现自己编写了很多由嵌套函数组成的函数。

这样做时我喜欢使用这种模式,因为我发现使用 eclipse 大纲视图再次很容易找到它们

var outer_func = function(){

  var inner_func1 = function(){
  //code
  }
  var inner_func2 = function(){
  //code
  }

}

我的问题:如果我从嵌套/内部函数中删除 var 关键字,是否有任何作用域差异?

感谢您的任何建议。

4

3 回答 3

1

如果您不使用 innervar关键字,那么您将创建名为inner_func1and的全局函数inner_func2。保持var.

于 2012-06-20T01:53:18.733 回答
1

是的,执行外部函数时,“内部”函数将变为全局函数。一般来说,最好使用函数声明,因为它们首先被处理。

function outer() {
  function inner() {
  }
  ...
}

仅在稍后需要定义函数的情况下使用表达式,例如基于某些直到稍后才知道的条件。

于 2012-06-20T01:54:48.500 回答
1

函数是它们自己的域,局部变量只暴露执行堆栈中。(或大多数人所说的“范围”)如果一个变量被声明为没有局部性(是局部的。),它会直接进入窗口(全局)对象,并且在函数完成时不会被垃圾收集。例如:

function somefunc(){
   var a;
   function nested(){
      a=2;//this will edit parent function's variable a
   }
   function anothernested(){
      var b=5;//this will create local variable in nested function
      c=3;//this will create global variable
   }
   nested();
   console.log(a);
}
于 2012-06-20T02:01:02.387 回答