封閉函數(shù) 閉包

(1)封閉函數(shù)

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>封閉函數(shù)</title>
  <script type="text/javascript">
      /*原來的寫法
      function myAlert(){
          var str = '歡迎訪問我的主頁';
          alert(str);
      }
      myAlert();*/
      var str = function(){
          alert('test');
      }
      
      //封閉函數(shù)的一般寫法
      //封閉函數(shù)定義:(function(){……})()
      /*
      ;;(function(){
          var str = '歡迎訪問我的主頁';
          alert(str);
      })();//最后的()表示馬上執(zhí)行
      */
      //封閉函數(shù)其他的寫法:在匿名函數(shù)前加“却嗡!”或者“~”,之后加“()”
      ~function(){
          var str = '歡迎訪問我的主頁';
          alert(str);
      }();
  </script>
</head>
<body>
  
</body>
</html>

(2)用變量的方式定義函數(shù)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>用變量的方式定義函數(shù)</title>
    <script type="text/javascript">
        /*
        原來的寫法:可以提前
        myAlert();
        function myAlert(){
            alert('hello!');
        }*/
        //函數(shù)用變量方式定義:先定義再使用
        // myalert();//提前會報錯
        var myAlert = function(){
            alert('hello!');
        }
        myAlert();//放在下面可以執(zhí)行
    </script>
</head>
<body>
    
</body>
</html>

(3)閉包

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>閉包</title>
    <script type="text/javascript">
        /*
        //閉包的一般寫法
        function aa(b){
            var a = 12;
            function bb(){
                alert(a);
                alert(b);
            }
            return bb;
        }
        var cc = aa(24);*/
        
        //閉包的封閉函數(shù)寫法
        var cc = (function(b){
            var a = 12;
            function bb(){
                alert(a);
                alert(b);
            }
            return bb;
        })(24);
        cc();
        
        /*
        //只能調(diào)用一次的閉包
        (function(b){
            var a = 12;
            function bb(){
                alert(a);
                alert(b);
            }
            return bb;
        })(24)();
        */
    </script>
</head>
<body>
    
</body>
</html>

(4)閉包存循環(huán)的索引

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>閉包存循環(huán)的索引值</title>
    <style type="text/css">
        li{
            height: 30px;
            background-color: gold;
            margin-bottom: 10px;
        }
    </style>
    <script type="text/javascript">
        //閉包的用途:存循環(huán)的索引值
        window.onload = function(){
            var aLi = document.getElementsByTagName('li');
            // alert(aLi.length);//8
            for(var i=0; i<aLi.length; i++){
                /*
                aLi[i].onclick = function(){
                    alert(i);//每個li都彈出8姥卢,因為點擊時循環(huán)已完畢,i最后為8
                }
                */
                (function(k){//這里的k是形參
                    aLi[k].onclick = function(){
                        alert(k);//彈出每個li的索引值
                    }
                })(i);//這里的i是實參
            }
        }
    </script>
</head>
<body>
    <ul>
        <li>1</li>
        <li>2</li>
        <li>3</li>
        <li>4</li>
        <li>5</li>
        <li>6</li>
        <li>7</li>
        <li>8</li>
    </ul>
</body>
</html>

(5)閉包做私有變量計數(shù)器

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>閉包做私有變量計數(shù)器</title>
    <script type="text/javascript">
        //閉包的用途:私有變量計數(shù)器
        var count = (function(){
            var a = 0;
            function bb(){
                a++;
                return a;
            }
            return bb;
        })();
        
        //每調(diào)用一次count赂苗,a就自增一次
        alert(count());//1
        alert(count());//2
        var c = count();
        alert(c);//3
    </script>
</head>
<body>
    
</body>
</html>

(6)閉包做選項卡

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>閉包做選項卡</title>
    <style type="text/css">
        .btns{
            width: 500px;
            height: 50px;
        }
        /*選項卡的樣式*/
        .btns input{
            width: 100px;
            height: 50px;
            background-color: #ddd;/*默認灰色*/
            color: #666;
            border: 0px;
        }
        /*被選中的選項卡的樣式*/
        .btns input.cur{
            background-color: gold;
        }
        /*內(nèi)容區(qū)的樣式*/
        .contents div{
            width: 500px;
            height: 300px;
            background-color: gold;
            display: none;/*默認隱藏*/
            line-height: 300px;
            text-align: center;
        }
        /*被選中的內(nèi)容區(qū)的樣式*/
        .contents div.active{
            display: block;
        }
    </style>
    <script type="text/javascript">
        //閉包做選項卡
        window.onload = function(){
            var aBtn = document.getElementById('btns').getElementsByTagName('input');
            var aCon = document.getElementById('contents').getElementsByTagName('div');
            // alert(aCon.length);
            //循環(huán)所有的選項卡按鈕
            for(var i=0; i<aBtn.length; i++){
                (function(i){
                    //給每個選項卡按鈕添加點擊事件
                    aBtn[i].onclick = function(){
                        //遍歷所有選項卡按鈕
                        for(var j=0; j<aBtn.length; j++){
                            //將每個選項卡按鈕都設(shè)為灰色
                            aBtn[j].className = '';
                            //將每個內(nèi)容區(qū)都隱藏
                            aCon[j].className = '';
                        }
                        //this代表當前點擊的Button對象
                        this.className = 'cur';//當前點擊的按鈕為金色
                        // alert(i);//不加閉包時,不管點哪個按鈕贮尉,i都等于3
                        //加閉包保存了索引值才有效
                        aCon[i].className = 'active';//當前點擊的按鈕對應(yīng)的內(nèi)容顯示
                    }
                })(i);
            }
        }
    </script>
</head>
<body>
    <div class="btns" id="btns">
        <input type="button" value="tab01" class="cur">
        <input type="button" value="tab02">
        <input type="button" value="tab03">
    </div>
    <div class="contents" id="contents">
        <div class="active">tab文字內(nèi)容一</div>
        <div>tab文字內(nèi)容二</div>
        <div>tab文字內(nèi)容三</div>
    </div>
</body>
</html>

(8)跳轉(zhuǎn)的源頁面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>跳轉(zhuǎn)的源頁面</title>
    <script type="text/javascript">
        
    </script>
</head>
<body>
    
</body>
</html>
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末拌滋,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子猜谚,更是在濱河造成了極大的恐慌败砂,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,386評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件魏铅,死亡現(xiàn)場離奇詭異昌犹,居然都是意外死亡,警方通過查閱死者的電腦和手機览芳,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評論 3 394
  • 文/潘曉璐 我一進店門斜姥,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人沧竟,你說我怎么就攤上這事铸敏。” “怎么了悟泵?”我有些...
    開封第一講書人閱讀 164,704評論 0 353
  • 文/不壞的土叔 我叫張陵杈笔,是天一觀的道長。 經(jīng)常有香客問我糕非,道長蒙具,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,702評論 1 294
  • 正文 為了忘掉前任朽肥,我火速辦了婚禮店量,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘鞠呈。我一直安慰自己融师,他們只是感情好,可當我...
    茶點故事閱讀 67,716評論 6 392
  • 文/花漫 我一把揭開白布蚁吝。 她就那樣靜靜地躺著旱爆,像睡著了一般。 火紅的嫁衣襯著肌膚如雪窘茁。 梳的紋絲不亂的頭發(fā)上怀伦,一...
    開封第一講書人閱讀 51,573評論 1 305
  • 那天,我揣著相機與錄音山林,去河邊找鬼房待。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的桑孩。 我是一名探鬼主播拜鹤,決...
    沈念sama閱讀 40,314評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼流椒!你這毒婦竟也來了敏簿?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,230評論 0 276
  • 序言:老撾萬榮一對情侶失蹤宣虾,失蹤者是張志新(化名)和其女友劉穎惯裕,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體绣硝,經(jīng)...
    沈念sama閱讀 45,680評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡蜻势,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,873評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了鹉胖。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片握玛。...
    茶點故事閱讀 39,991評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖次员,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情王带,我是刑警寧澤淑蔚,帶...
    沈念sama閱讀 35,706評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站愕撰,受9級特大地震影響刹衫,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜搞挣,卻給世界環(huán)境...
    茶點故事閱讀 41,329評論 3 330
  • 文/蒙蒙 一带迟、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧囱桨,春花似錦仓犬、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至翠语,卻和暖如春叽躯,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背肌括。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評論 1 270
  • 我被黑心中介騙來泰國打工点骑, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 48,158評論 3 370
  • 正文 我出身青樓黑滴,卻偏偏與公主長得像憨募,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子跷跪,可洞房花燭夜當晚...
    茶點故事閱讀 44,941評論 2 355

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

  • 1吵瞻、封閉函數(shù) 2葛菇、用變量的方式定義函數(shù) 3、閉包 4橡羞、閉包存循環(huán)的索引值 5眯停、閉包做私有變量計數(shù)器 6、閉包做選項...
    WANGLIN_HZ閱讀 202評論 0 1
  • 變量作用域 變量作用域指的是變量的作用范圍卿泽,javascript中的變量分為全局變量和局部變量莺债。 1、全局變量:在...
    奮斗的老王閱讀 751評論 0 49
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴謹 對...
    cosWriter閱讀 11,101評論 1 32
  • 1.ios高性能編程 (1).內(nèi)層 最小的內(nèi)層平均值和峰值(2).耗電量 高效的算法和數(shù)據(jù)結(jié)構(gòu)(3).初始化時...
    歐辰_OSR閱讀 29,386評論 8 265
  • 墨舞熒屏新意茂签夭,俊賞嘉才齐邦,颯爽英姿妙。 詠盡天涯花月好第租,歸時又見董卿笑措拇。 飛花逐令無限巧,倚夢癡人慎宾,欲攬全詞曉丐吓。 ...
    文泳閱讀 399評論 2 4