JavaScript學習筆記(四)——函數(shù)表達式

匿名函數(shù)

var functionName = function(arg0, arg1,arg2){
  //do sth
};

作用:模仿塊級作用域

//用作會計作用域(私有作用域)的匿名函數(shù)的語法
(function(){
  //這里是塊級作用域
})(); //函數(shù)聲明加上括號即可

function output(count){
  (function(){
    for(var i = 0; i < count; i++ ){
      console.log(i);
    }
  })();

  console.log(i); // 出錯
}

遞歸

function factorial(num){
  if (num <= 1 ){
    return 1;
  } else {
    return num * arguments.callee(num - 1); //使用arguments.callee而不是函數(shù)名的原因是函數(shù)名可能會發(fā)生變化
  }
}

嚴格模式下使用命名函數(shù)

var factorial = (function f(num){
  if (num <= 1){
    return 1;
  } else {
    return num * f(num - 1);
  }
});

閉包

閉包是指有權(quán)訪問另一個函數(shù)作用域中的變量的函數(shù)。創(chuàng)建閉包常見的方式黔衡,就是在一個函數(shù)內(nèi)部創(chuàng)建另一個函數(shù)。

當在函數(shù)內(nèi)部定義了其他函數(shù)是腌乡,就創(chuàng)建了閉包盟劫。閉包有權(quán)訪問包含函數(shù)內(nèi)部的所有變量,原理如下:

  • 在后臺執(zhí)行環(huán)境中与纽,閉包的作用域鏈包含著它自己的作用域侣签、包含函數(shù)的作用域和全局作用域。
  • 通常急迂,函數(shù)的作用域及其所有變量都會在函數(shù)執(zhí)行結(jié)束后被銷毀影所。
  • 當函數(shù)返回了一個閉包是,這個函數(shù)的作用域?qū)恢辉趦?nèi)存中保存到閉包不存在為止僚碎。
function createFunctions(){
  var result = new Array();
  for (var i = 0; i < 10; i++ ){
    result[i] = function(){
      return i;
    };
  }
  return result;
}

var result = createFunctions();
result.forEach(function(item, index, array){
  console.log(item());//10個10
});

每個函數(shù)都返回10猴娩,因為每個函數(shù)的作用域鏈中都保存著createFunctions()函數(shù)的活動對戲那個,所以它們引用的是同一個變量i勺阐。當createFunction()函數(shù)返回后卷中,變量i的值都是10。

通過定義匿名函數(shù)渊抽,并將立即執(zhí)行該匿名函數(shù)的結(jié)果賦給數(shù)組可以解決這個問題:

function createFunctions(){
  var result = new Array();
  for (var i = 0; i < 10; i++ ){
    result[i] = function(num){
      return function(){
        return num;
      };
    }(i);
  }
  return result;
}

var result = createFunctions();
result.forEach(function(item, index, array){
  console.log(item());//0~9
});

作用:用于創(chuàng)建訪問私有變量的公有方法蟆豫。

特權(quán)方法:有權(quán)訪問私有變量和私有函數(shù)的公有方法

//增強的模塊模式
var f = function(){
  //私有變量和私有函數(shù)
  var privateVar = 10;

  function privateFunction(){
    return false;
  }

  //創(chuàng)建對象
  var object = new CustomType();

  //添加特權(quán)/公有屬性和方法
  object.publicProperty = true;

  object.publicMethod = function(){
    privateVar++;
    return privateFunction();
  };

  return object;

}();

this

幾種特殊情況下,this的值可能會意外改變懒闷。

var name = "The Window";

var object = {
  name : "Object",

  getName : function(){
    return this.name;
  }
};

object.getName(); // 'Object"
(object.getName)(); // "Object"
(object.getName = object.getName)(); //"The Window"
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末十减,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子愤估,更是在濱河造成了極大的恐慌帮辟,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,734評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件灵疮,死亡現(xiàn)場離奇詭異织阅,居然都是意外死亡,警方通過查閱死者的電腦和手機震捣,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評論 3 394
  • 文/潘曉璐 我一進店門荔棉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蒿赢,你說我怎么就攤上這事润樱。” “怎么了羡棵?”我有些...
    開封第一講書人閱讀 164,133評論 0 354
  • 文/不壞的土叔 我叫張陵壹若,是天一觀的道長。 經(jīng)常有香客問我,道長店展,這世上最難降的妖魔是什么养篓? 我笑而不...
    開封第一講書人閱讀 58,532評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮赂蕴,結(jié)果婚禮上柳弄,老公的妹妹穿的比我還像新娘。我一直安慰自己概说,他們只是感情好碧注,可當我...
    茶點故事閱讀 67,585評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著糖赔,像睡著了一般萍丐。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上放典,一...
    開封第一講書人閱讀 51,462評論 1 302
  • 那天逝变,我揣著相機與錄音,去河邊找鬼刻撒。 笑死骨田,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的声怔。 我是一名探鬼主播态贤,決...
    沈念sama閱讀 40,262評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼醋火!你這毒婦竟也來了悠汽?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,153評論 0 276
  • 序言:老撾萬榮一對情侶失蹤芥驳,失蹤者是張志新(化名)和其女友劉穎柿冲,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體兆旬,經(jīng)...
    沈念sama閱讀 45,587評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡假抄,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,792評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了丽猬。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片宿饱。...
    茶點故事閱讀 39,919評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖脚祟,靈堂內(nèi)的尸體忽然破棺而出谬以,到底是詐尸還是另有隱情,我是刑警寧澤由桌,帶...
    沈念sama閱讀 35,635評論 5 345
  • 正文 年R本政府宣布为黎,位于F島的核電站邮丰,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏铭乾。R本人自食惡果不足惜剪廉,卻給世界環(huán)境...
    茶點故事閱讀 41,237評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望片橡。 院中可真熱鬧妈经,春花似錦、人聲如沸捧书。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽经瓷。三九已至,卻和暖如春洞难,著一層夾襖步出監(jiān)牢的瞬間舆吮,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評論 1 269
  • 我被黑心中介騙來泰國打工队贱, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留色冀,地道東北人。 一個月前我還...
    沈念sama閱讀 48,048評論 3 370
  • 正文 我出身青樓柱嫌,卻偏偏與公主長得像锋恬,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子编丘,可洞房花燭夜當晚...
    茶點故事閱讀 44,864評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 定義函數(shù)的方式有兩種:函數(shù)聲明和函數(shù)表達式与学。 函數(shù)聲明的一個重要特征就是函數(shù)聲明提升,意思是在執(zhí)行代碼前會先讀取函...
    oWSQo閱讀 665評論 0 0
  • 本章內(nèi)容 函數(shù)表達式的特征 使用函數(shù)實現(xiàn)遞歸 使用閉包定義私有變量 定義函數(shù)的方式有兩種:一種是函數(shù)聲明嘉抓,另一種就...
    悶油瓶小張閱讀 357評論 0 0
  • 最近學這塊知識學得有些吃力索守。還有很多遺漏的地方,只能以后多看些書來彌補了抑片。 第7章 函數(shù)表達式 函數(shù)定義的兩種方式...
    丨ouo丨閱讀 365評論 0 1
  • 定義函數(shù)的方法有兩種:函數(shù)聲明和函數(shù)表達式卵佛。 函數(shù)聲明 使用函數(shù)聲明時,函數(shù)聲明會被提升至當前作用域最前面敞斋。 但是...
    exialym閱讀 373評論 0 3
  • 你好 你好啊 無需列表 無需列表 有序列表 hahha 哈哈哈 你好啊
    乞力馬扎羅山雪閱讀 102評論 0 0