例如:
//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,返回嵌入函数的原因还是可以调用函数的本地变量。
答案 0 :(得分:1)
回答你的问题:
功能陈述与表达之间的区别
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。