JavaScript/匿名函數和閉包
匿名函數
編輯匿名函數是一種沒有函數名的函數。 在 Javascript 中,有時我們定義函數為
function(){
//some code
}
這種定義經常出現在向某些函數傳遞迴調函數的場景下,由於回調函數使用一次後就會銷毀(離開調用者作用域),函數名就變得多餘。
或者定義為
(function(){
//some code
})()
這種定義實際上定義了一個匿名函數且只執行一次, 主要用於提供局部變量的作用域 以上兩種均為匿名函數
閉包
編輯閉包指的是函數的局部變量不與外界共享的語法特性。如下例:
var a=1;
function outerFunction(){
var a=2;
console.log("函数内的a=" + a);
}
outerFunction();
console.log("函数外的a=" + a);
輸出:
函数内的a=2
函数外的a=1
之前提到過JavaScript中的函數也是對象,那麼能不能將函數作為對象返回呢?答案是可以。
作為返回值的函數,可以將函數內部的值傳遞到外部。如下例:
var a=1;
function outerFunction(){
var a=2;
console.log("函数内的a=" + a);
return function(){
console.log("返回值函数访问的a=" + a);
}
}
var innerFunction=outerFunction();
innerFunction();
console.log("函数外的a=" + a);
輸出:
函数内的a=2
返回值函数访问的a=2
函数外的a=1