成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

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

_Suqin / 1521人閱讀

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

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

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

2.first-class function

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

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

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

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

7.閉包是怎么回事兒?

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

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

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

概述

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

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

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

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

2.看到函數(shù)表達(dá)式也沒啥奇怪的,因?yàn)楹瘮?shù)是對(duì)象,那把一個(gè)對(duì)象賦值給一個(gè)變量或者當(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.說到了對(duì)象我們就說下引用和復(fù)制的區(qū)別。
var a = 12;
var b = a;
b+=5;
alert(a);//12

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

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

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

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

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

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

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

好吧,直接上一個(gè)例子吧??梢月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對(duì)象 object
        }
};

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

var person = {
        name:"leo",
        show:function(){
             this.name = "leolau"; 
             console.log(this);//person對(duì)象 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對(duì)象 object
              var bug = function(){
              console.log(that);//person
            }
            bug();
        }   
};

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

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

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

命名沖突

a.js

var a = 12;

b.js

var a = 5;

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

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

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

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

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

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

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

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/82600.html

相關(guān)文章

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

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

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

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

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

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

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

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

    winterdawn 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<