我对Javascript比较新手,了解匿名函数的概念,但是闭包似乎不太清楚。在我的印象里,它们两者之间的相似之处很令人困惑。
有人能否解释一下它们的区别呢?最好附带一些代码片段,以便更清晰地阐述这些要点。
我对Javascript比较新手,了解匿名函数的概念,但是闭包似乎不太清楚。在我的印象里,它们两者之间的相似之处很令人困惑。
有人能否解释一下它们的区别呢?最好附带一些代码片段,以便更清晰地阐述这些要点。
匿名函数是指没有名称的函数,除此之外与Javascript中的常规函数相同。 以下是一个例子。 情况1: 这只是一些普通/常规的Javascript函数。
var sayHello = function iWillSayHello(name){
var fullName = "Hello, " + name;
console.log(fullName);
}
sayHello("ABC"); // prints---> Hello, ABC
案例2: 这是匿名函数, 它与上面的函数具有相同的行为,
var sayHello = function(name){
var fullName = "Hello, " + name;
console.log(fullName);
}
sayHello("ABC"); // prints---> Hello, ABC
第三种情况: 如果(我认为)你所说的“匿名函数”是指IIFE(立即调用函数表达式), 那么就是这样的,
(function(name){
var fullName = "Hello, " + name;
console.log(fullName);
})(); // prints---> Hello, ABC
function outerSayHello(firstName){
var fullName = firstName;
function innerSayHello(lastName){
console.log("Hello, ", fullName + " " + lastName);
}
return innerSayHello;
}
console.log("1-------------------------");
var sayHello = outerSayHello("A");
sayHello("B");
//Hello, A B
console.log("2-------------------------");
var sayHello1 = outerSayHello("A1");
sayHello1("B1");
//Hello, A1 B1
console.log("3-------------------------");
sayHello("b");
//Hello, A b
console.log("4-------------------------");
sayHello1("b1");
//Hello, A1 b1
console.log("5-------------------------");
outerSayHello("ABC")("XYZ");
//Hello, ABC XYZ
to better understand these let's console the sayHello variable
console.log("6-------------------------",sayHello);
/*
innerSayHello(lastName){
console.log("Hello, ", fullName + " " + lastName);
}
*/
这意味着sayHello变量具有指向/引用innerSayHello函数的指针/引用。 由于innerSayHello依赖于fullName变量,在outerSayHello返回后,它仍将保留在堆上,并且fullName和innerSayHello仍然在堆栈中。 因此,在堆上,将为fullname和innerSayHello创建多个引用。