成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

體驗javascript之美-第五課 匿名函數(shù)自執(zhí)行和閉包是一回事兒嗎?

_Suqin / 1462人閱讀

摘要:大家想想怎么做什么是匿名函數(shù)自執(zhí)行并如何在實際庫中應(yīng)用匿名函數(shù)自執(zhí)行,注意,注意,只有這個名字和沒有其它名字,比如封閉空間,這個是為了讓大家好理解自己造的詞語。

通過本節(jié)課你將學(xué)到:

1.什么是函數(shù)表達(dá)式和函數(shù)聲明

2.first-class function

3.引用和復(fù)制的區(qū)別

4.函數(shù)傳參是怎么回事兒

5.關(guān)于函數(shù)的this和arguments

6.什么是匿名函數(shù)自執(zhí)行并如何在實際庫中應(yīng)用

7.閉包是怎么回事兒?

8.閉包的原理和在jquery中的應(yīng)用

9.從一到面試題徹底理解閉包和垃圾回收機(jī)制

10.回調(diào)函數(shù)是什么?

概述

在javascript中,有些看起來很復(fù)雜卻又很好理解的東西,但是理解他們需要一定的技巧同時理解他們又非常的重要,了解了他們就給你打開了一扇門,讓你知其然還能夠知其所以然。因為他們緊密結(jié)合,自成一體。今天我們來說說這些既簡單有重要的東西。

1.什么是函數(shù)表達(dá)式和函數(shù)聲明

? 大家已經(jīng)知道函數(shù)就是特殊的對象,然后大家也了解函數(shù)聲明和函數(shù)表達(dá)式了。

      //函數(shù)聲明
        function show(){
            console.log(12);
        }
        
     //函數(shù)表達(dá)式
        var show = function(){
            console.log(5);
        };   

2.看到函數(shù)表達(dá)式也沒啥奇怪的,因為函數(shù)是對象,那把一個對象賦值給一個變量或者當(dāng)成參數(shù)傳遞都是可以的。

     //函數(shù)表達(dá)式
        var show = function(){
            console.log(5);
        };  
        
        function Simple(show){
              show();
        }
        //或者更直接
        function Simple(){
              
        }
        simple(function(){});

函數(shù)能像數(shù)字一樣賦值給變量傳遞給參數(shù)的現(xiàn)象就叫做 first-class function,沒啥難的吧。

3.說到了對象我們就說下引用和復(fù)制的區(qū)別。
var a = 12;
var b = a;
b+=5;
alert(a);//12

這個沒啥好解釋的,b復(fù)制一份兒啊,b怎么改跟a無關(guān)。

var arr1 = [12,5,8];
var arr2 = arr1;
arr2.pop();
alert(arr1);//12,5

我擦嘞,發(fā)生了什么?

記住一句話,基本類型的復(fù)制是直接拷貝一份兒跟原來的無關(guān),而對象復(fù)制僅僅是把地址指向復(fù)制了一份兒。

我有一個饅頭,基本類型復(fù)制就相當(dāng)于照著我的饅頭又給你做一個,吃了你的饅頭我手里的沒影響。

我有一把鑰匙,能開一個合租房的門,對象復(fù)制是引用,就是復(fù)制了一把鑰匙,你把廁所給拆了,我也嘚憋著。理解了不?

4.函數(shù)傳參這個我只是說一句,這個是很多開發(fā)者犯錯的地方,這里不解釋我一解釋你上下都不明白了只是告訴你就行。
訪問變量有按值和按引用兩種方式,但是參數(shù)只能是按值傳遞。
參數(shù)類型是基本類型時,被傳遞的值被復(fù)制給一個局部變量,而復(fù)合類型復(fù)制的是地址。

好吧,直接上一個例子吧??梢月I(lǐng)悟吧。

function setName(obj){
  obj.name = "尼古拉斯·屌·大彬哥"
  //重點(diǎn)
  obj = new Object();
  obj.name = "帥彬"
}
var Person = new Object();
setName(Person);
alert(Person.name);
5.關(guān)于函數(shù)的this和arguments

js里面最惡心的東西,沒有之一。下面我說說this.這里我只說函數(shù)里面的this.

function show(){console.log(this);}//window
var show = function{console.log(this);}//window

注意了,

var person = {
        name:"leo",
        show:function(){
             this.name = "leolau"; 
             console.log(this);//person對象 object
        }
};

但是這里有個奇怪的事情,很多人認(rèn)為是bug,面試也經(jīng)???。

var person = {
        name:"leo",
        show:function(){
             this.name = "leolau"; 
             console.log(this);//person對象 object
              var bug = function(){
              console.log(this);//window
            }
            bug();
        }   
};

如何解決?

var person = {
        name:"leo",
        show:function(){
            var that = this;
             this.name = "leolau"; 
             console.log(this);//person對象 object
              var bug = function(){
              console.log(that);//person
            }
            bug();
        }   
};

至于arguments給大家一個實際應(yīng)用。未知參數(shù)個數(shù)不定求和。大家想想怎么做?

6.什么是匿名函數(shù)自執(zhí)行并如何在實際庫中應(yīng)用

匿名函數(shù)自執(zhí)行,注意,注意,只有這個名字和iife沒有其它名字,比如封閉空間,這個是為了讓大家好理解自己造的詞語。他的一個重要用途就是防止命名沖突,另外是組織和架構(gòu)庫,比如jquery.

命名沖突

a.js

var a = 12;

b.js

var a = 5;

同時引用a,b后面覆蓋前面了就。怎么防止命名沖突前后覆蓋。

var a = 12;
(function(){
      var a = 5;
})();

這里iifes里面的a并不會干擾外面的a,那么問題來了,萬一我就想改外面的a,呢?

這也是很多jquery庫的做法,這么搞:

(function(global,$){
    $.a = 12;
    global.a = 5;
  
})(window,jquery);

既滿足了外面的修改,又做到了防止變量污染。閉包下節(jié)課再說困了。

下節(jié)課多帶帶說閉包,垃圾回收,回調(diào)函數(shù)和定時器。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/82600.html

相關(guān)文章

  • 體驗javascript之美五課 五分鐘徹底明白 匿名函數(shù)執(zhí)行閉包

    摘要:注意匿名函數(shù)自執(zhí)行只是產(chǎn)生閉包的一種情況,閉包是現(xiàn)象或者情形,不實用匿名函數(shù)自執(zhí)行也有很多情況產(chǎn)生閉包,所以而且根本就是兩回事兒,不能混淆。小測驗,你能看出下面的程序用了閉包嗎閉包在中使用。閉包無處不在,直接看的例子。 通過文你將學(xué)到: 1.閉包是怎么回事兒? 2.閉包的原理和在jquery中的應(yīng)用 3.從一到面試題徹底理解閉包和垃圾回收機(jī)制 4.閉包在jquery中的應(yīng)用 概述 ...

    HitenDev 評論0 收藏0
  • 體驗javascript之美第四課--函數(shù)、函數(shù)表達(dá)式、閉包

    摘要:大彬哥版權(quán)所有翻錄必究尼古拉斯屌大彬哥群尼古拉斯屌大彬哥函數(shù)聲明函數(shù)表達(dá)式是不是簡單的讓人發(fā)指區(qū)別就一句話,函數(shù)聲明,可以在函數(shù)調(diào)用之后,因為有函數(shù)預(yù)解析。而函數(shù)表達(dá)式必須在調(diào)用之前。 通過前三課講解,大家應(yīng)該能做到 1.手里有一份隨時能夠換工作自信的簡歷 2.知道了學(xué)習(xí)js的正確姿勢 3.理解了全局對象、全局上下文、知道有預(yù)解析同時做了至少50道面試題 4.能熟練的使用json構(gòu)建...

    Doyle 評論0 收藏0
  • javascript -- 回調(diào)函數(shù)之美

    javascript -- 回調(diào)函數(shù) 在高級語言層出不窮的年代, 各個語言都號稱有著一切皆為對象的自豪說法, 而 js 作為一門腳本語言卻相對于java等傳統(tǒng)面向?qū)ο笳Z言有很大的不同之處, 除了 js 詭異的繼承體系之外, 最令人著迷的一個特性就是回調(diào)函數(shù), 當(dāng)然也有很多人對他詬病, 筆者認(rèn)為 回調(diào)函數(shù) 和 異步 是js語言特性的兩大最為突出的店, 當(dāng)然正如所有優(yōu)點(diǎn)需要滿足自我的需求, 這個世界...

    kbyyd24 評論0 收藏0
  • 原生js練習(xí)題---五課

    摘要:那該如何是好原題給出思路是讓事件負(fù)責(zé)標(biāo)記按鍵就好了,而方向鍵的事件處理使用設(shè)個周期比較小的定時器持續(xù)監(jiān)聽,由于周期小,長按時就會立刻執(zhí)行相應(yīng)的事件處理,效果更加流暢。閃爍實現(xiàn)效果閃爍簡單的一個定時器應(yīng)用,用或都可以實現(xiàn)。 0x1模擬select控件 實現(xiàn)效果:5-01模擬select控件 比較簡單的點(diǎn)擊事件處理,也就處理點(diǎn)擊選擇框展示菜單、點(diǎn)擊菜單選擇、點(diǎn)擊頁面任意角落隱藏菜單這三件事...

    winterdawn 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<