嵌入功能问题

时间:2010-12-18 17:12:29

标签: javascript closures

例如:

//global vars
var g1,g2,g3;
function a(p1,p2,p3){
  //local vars
  var a1,a2,a3;
  return function(){
    //an embed function, looks like dynamic defined at runtime
  }
}

var f1 = a(1,2,3)
var f2 = a(4,5,6)
f1()
f2()

我的问题是,f1和f2指向内存中的相同代码,为什么它们接缝不同的功能?每次调用时,是否会花费时间来创建嵌入函数?

和GC工作也很有趣,一个执行后不会是GC的本地变量,返回的嵌入函数GCed后必须是GC,返回嵌入函数的原因还是可以调用函数的本地变量。

3 个答案:

答案 0 :(得分:1)

回答你的问题:

  1. 他们没有指出不同的功能
  2. 当然需要一点时间来创建新功能
  3. 这是因为返回的函数是闭包,并且仍然可以引用它们的创建范围。
  4. 功能陈述与表达之间的区别

    function foo() {} // created at compile time, is available every in the code from the start
    
    var foo = function() {}; // created at runtime, only is available after it's creation
                             // while foo already exists it's set to undefined
    
    function test() {
        return function(){}; // returns a new function each time test is called
    }
    

    关闭

    function test() {
        var b = 123;
    
        // this function inherits all outer scopes so it still has access to b
        return function() {
            console.log(b); //
        };
    }
    

    有关闭包的更多信息,请参阅此question和答案。

答案 1 :(得分:1)

  

我的问题是,f1和f2指向内存中的相同代码,为什么它们接缝不同的功能?

他们没有指向相同的功能。

  每次调用时,

是否会花费时间来创建嵌入函数?

是的,每次调用a函数时,都会创建并返回一个新的内部函数。

  

和GC工作也很有趣,一个执行后不会是GC的本地变量,返回的嵌入函数GCed后必须是GC,返回嵌入函数的原因还是可以调用函数的本地变量。

是的,这叫做封闭。内部函数可以访问创建它的执行环境的所有变量。

答案 2 :(得分:0)

正如您所提到的,嵌入式函数可以访问局部变量。这称为closure