国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專(zhuān)欄INFORMATION COLUMN

模塊化、閉包與立即執(zhí)行函數(shù)的使用、MVC里的V和C

2501207950 / 2043人閱讀

摘要:模塊化里的和閉包與立即執(zhí)行函數(shù)的使用這篇文章記錄我寫(xiě)在線個(gè)人簡(jiǎn)歷過(guò)程中學(xué)習(xí)的知識(shí)完整代碼暫未完成預(yù)覽地址輪播組件的使用英文官網(wǎng)中文網(wǎng)使用方法模塊化學(xué)習(xí)寫(xiě)代碼的方法抄運(yùn)行修改模塊化把對(duì)應(yīng)功能放到塊里面這個(gè)塊可以是文件或者或者別的等等立即執(zhí)

模塊化、MVC里的V和C、閉包與立即執(zhí)行函數(shù)的使用

這篇文章記錄我寫(xiě)在線個(gè)人簡(jiǎn)歷過(guò)程中學(xué)習(xí)的知識(shí)
完整代碼(暫未完成)
預(yù)覽地址

輪播Swiper組件的使用

英文官網(wǎng)

中文網(wǎng)--Swiper4.x使用方法

模塊化

學(xué)習(xí)寫(xiě)代碼的方法:
CRM
抄,運(yùn)行,修改

模塊化:把對(duì)應(yīng)功能放到塊里面,這個(gè)塊可以是文件,或者div或者別的等等

立即執(zhí)行函數(shù)的使用

將js分成不同的幾個(gè)模塊后,然后使用文件引入,但是會(huì)出現(xiàn)問(wèn)題:如果使用var 聲明變量,那么就會(huì)成為全局變量,這樣容易覆蓋.

ES6之前,只有函數(shù)里面才有局部變量.
如果只用花括號(hào)包起來(lái),那么在C++或者JAVA里面就是局部變量,但是JS里面會(huì)變量提升,提升到當(dāng)前函數(shù)的最高地方,所以仍然是全局變量.

所以如果想用局部變量,解決方法是把它放到一個(gè)函數(shù)中,然后立即執(zhí)行,這樣這個(gè)函數(shù)內(nèi)部的變量就是局部變量.也不會(huì)被相同名字的全局變量覆蓋.


不加感嘆號(hào)就會(huì)語(yǔ)法錯(cuò)誤,不會(huì)執(zhí)行.所以得加一個(gè)感嘆號(hào),取反,就會(huì)運(yùn)行后面的代碼,執(zhí)行后面的函數(shù).雖然改變了返回值,但是我們不需要返回值.所以改變了也無(wú)所謂

所以接下來(lái)我們將所有自己分離出來(lái)的單個(gè)js文件,都使用立即執(zhí)行函數(shù)!function(){}.call()包起來(lái)

這樣才算真正的模塊化,代碼相互之間沒(méi)有影響.

ps:
ES6模塊

閉包的使用

下面的例子都使用立即執(zhí)行函數(shù)隔離作用域
如果兩個(gè)模塊之間需要交流,例如在第一個(gè)模塊上初始化,在第二個(gè)模塊上使用

方法一:使用window

比如兩個(gè)模塊

module1.js和module2.js都被引入一個(gè)html文件里

//module1.js
!function(){
    var person = window.person = {
        name:"frank",
    }
    //局部變量person和全局變量person用的是同一個(gè)地址
}.call()

雖然不同變量,但是是同樣的地址

//module2.js
!function(){
    var person = person;//即var person = window.person;
    console.log(person);
}.call();

這樣不同模塊間就可以通信,但這種方法不好.

方法二:使用閉包

始終不知道person的全部信息
,只能知道age的信息,且只能做一些它允許你操作的事情,這樣module1就會(huì)對(duì)局部變量person有一個(gè)掌控.不會(huì)出現(xiàn)有人把person變成-1的情況,因?yàn)樗L問(wèn)不到age,他只能去GrowUp,除此之外沒(méi)有能訪問(wèn)到的方法.

//module1.js
!function(){
    var person = {
        name:"mataotao",
        age:18,
    };
    window.mataotaoGrowUp = function(){
        person.age+=1;
        return person.age;
    };
}.call();
//module2.js
!function(){
    var newAge = window.mataotaoGrowUp();
    console.log(newAge);//19
}.call();

閉包在哪里?

如果一個(gè)函數(shù)訪問(wèn)了函數(shù)外的變量(mataotaoGrowUp()使用了person.age),那么 函數(shù)+函數(shù)外的變量,就是 閉包.

閉包作用:

用來(lái) 隱藏?cái)?shù)據(jù)細(xì)節(jié) (不告訴你多少歲但是你可以讓他漲一歲,隱藏了age 的細(xì)節(jié)和name)

可以用來(lái) 做訪問(wèn)控制 (只能訪問(wèn)到age,無(wú)法訪問(wèn)到name)

如果沒(méi)有立即執(zhí)行函數(shù)來(lái)模塊化,那么這個(gè)閉包毫無(wú)意義,因?yàn)閜erson直接使全局變量,所有的函數(shù)都可以訪問(wèn)到,并且修改也無(wú)法隱藏?cái)?shù)據(jù)細(xì)節(jié)

立即執(zhí)行函數(shù)+閉包 實(shí)現(xiàn)對(duì)象細(xì)節(jié)的封裝的方法

面試官會(huì)將上面的module1做如下修改(實(shí)際本質(zhì)不變)

//module1.js
var accessor = function(){//這是一個(gè)返回了匿名函數(shù)的函數(shù),accessor-訪問(wèn)器
    var person = {
        name:"mataotao",
        age:18,
    };
    return function(){
        person.age+=1;
        return person.age;
    };
}
var growUp = accessor();//執(zhí)行accessor得到一個(gè)GrowUp函數(shù)
//growUp現(xiàn)在是一個(gè)全局變量了
growUp();

實(shí)際growUp()就相當(dāng)于立即執(zhí)行了,因?yàn)槲衣暶髁艘粋€(gè)函數(shù),而且立即執(zhí)行了

這就是閉包

MVC的V和C

MVC的前提就是 模塊化

View就是能看到的東西

例如在
這個(gè)模塊中我們初始化了一個(gè)Swiper


這個(gè)并且對(duì).swiper-container這個(gè)div進(jìn)行操作,.swiper-container這個(gè)div就是 VIEW(用戶(hù)可以看到的東西).

對(duì)于輪播組件來(lái)說(shuō),這一部分就是他的view部分

這個(gè)div就是init-swiper這個(gè)模塊的view.

明白這個(gè)之后我們將view多帶帶分離出來(lái)

分離view

我們修改代碼,多帶帶將view分離,例如輪播圖的view:

也將剩下的幾個(gè)js模塊進(jìn)行修改

例如

view就是要告訴js,html中的哪一塊是我要操作的東西

Controller就是控制View的方法

MVC中的C用來(lái)控制/操作view

以topNavBar為例

將要做的操作寫(xiě)成controller函數(shù),并把要操作的view當(dāng)做參數(shù)傳進(jìn)去,實(shí)現(xiàn)對(duì)view的控制/操作

進(jìn)一步的改進(jìn):

需要注意:

對(duì)象的函數(shù)里的this,就是對(duì)象本身controller.init(view);//相當(dāng)于controller.init.call(controller,view);//this就是當(dāng)前對(duì)象

this.bindEvents();//相當(dāng)于this.bindEventS.call(this),這里的this就是init函數(shù)里call的controller,所以這個(gè)this是轉(zhuǎn)過(guò)來(lái)了,也是對(duì)象本身

繼續(xù)優(yōu)化,分離代碼

如果我們要做其他的事情,比如把激活和不激活這個(gè)導(dǎo)航分離,不要寫(xiě)在bindEvents里了,繼續(xù)在對(duì)象里添加操作的函數(shù)

bind(this)后,就是把controller綁定到這個(gè)函數(shù)的this上,把這個(gè)函數(shù)的this由window變成controller,之后this.active();this.deactive();這兩個(gè)this 就變成了controller了

bind方法用于將函數(shù)體內(nèi)的this綁定到某個(gè)對(duì)象,然后返回一個(gè)新函數(shù)。
bind()使用方法

這里的bind()就是將函數(shù)體內(nèi)的this綁定到了controller,函數(shù)體內(nèi)的this就是controller了

如果不用bind()也可以用箭頭函數(shù)()=>{},箭頭函數(shù)本身是沒(méi)有this的.所以如果在箭頭函數(shù)用this,那么就是箭頭函數(shù)外面的離它最近的this!

最終stick-navBar的代碼:

對(duì)輪播的js模塊使用controller進(jìn)行優(yōu)化

本來(lái):

修改后:

修改之后的前后對(duì)比
結(jié)構(gòu)非常清晰有條理,將整個(gè)要做的事井井有條得分為幾個(gè)部分

對(duì)當(dāng)頁(yè)跳轉(zhuǎn)的緩動(dòng)動(dòng)畫(huà)也進(jìn)行controller的優(yōu)化

下面是當(dāng)頁(yè)跳轉(zhuǎn)的緩動(dòng)動(dòng)畫(huà)修改后的代碼:

總結(jié)

這樣代碼就不會(huì)顯得混亂了,controller對(duì)view的操作被有條理地分開(kāi),有初始化view,綁定view事件,激活這個(gè)view,不激活這個(gè)view等等對(duì)view的操作
controller所有的屬性就是對(duì)view的所有操作!!!
這就是mvc里的c的意義

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

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

相關(guān)文章

  • 塊化編程、MVC、面向?qū)ο缶幊?/b>

    摘要:模塊化編程所謂模塊化編程,就是將代碼模塊化,每一塊代碼都只進(jìn)行一種操作,可以這樣理解吧。將所有的重復(fù)的代碼都提取出來(lái)形成對(duì)象構(gòu)造函數(shù)等,在需要使用的時(shí)候,調(diào)用或者使用等進(jìn)行操作。 模塊化編程 所謂模塊化編程,就是將代碼模塊化,每一塊代碼都只進(jìn)行一種操作,可以這樣理解吧。 全局變量和局部變量的轉(zhuǎn)換 模塊化編程重要的一點(diǎn)就是,在一個(gè)模塊里,所有的變量都是局部變量(對(duì)整個(gè)項(xiàng)目來(lái)說(shuō),對(duì)這個(gè)模塊...

    W4n9Hu1 評(píng)論0 收藏0
  • JS面向?qū)ο笠?MVC面向?qū)ο蠓庋b

    摘要:自己的理解的第一個(gè)參數(shù)就是的值如果沒(méi)用默認(rèn)是那個(gè)調(diào)用函數(shù)的當(dāng)前的對(duì)象在全局作用域中就是被隱藏的所以不寫(xiě)且在全局作用于調(diào)用函數(shù)的時(shí)候就是可以使用或者自己指定的指向 JS面向?qū)ο笠?MVC的面向?qū)ο蠓庋b MDNjavascript面向?qū)ο?面向?qū)ο?Object-Oriented) showImg(https://segmentfault.com/img/remote/1460000016...

    Scliang 評(píng)論0 收藏0
  • 前端面試題(3)現(xiàn)代技術(shù)

    摘要:什么是單頁(yè)面應(yīng)用單頁(yè)面應(yīng)用是指用戶(hù)在瀏覽器加載單一的頁(yè)面,后續(xù)請(qǐng)求都無(wú)需再離開(kāi)此頁(yè)目標(biāo)旨在用為用戶(hù)提供了更接近本地移動(dòng)或桌面應(yīng)用程序的體驗(yàn)。流程第一次請(qǐng)求時(shí),將導(dǎo)航頁(yè)傳輸?shù)娇蛻?hù)端,其余請(qǐng)求通過(guò)獲取數(shù)據(jù)實(shí)現(xiàn)數(shù)據(jù)的傳輸通過(guò)或遠(yuǎn)程過(guò)程調(diào)用。 什么是單頁(yè)面應(yīng)用(SPA)? 單頁(yè)面應(yīng)用(SPA)是指用戶(hù)在瀏覽器加載單一的HTML頁(yè)面,后續(xù)請(qǐng)求都無(wú)需再離開(kāi)此頁(yè) 目標(biāo):旨在用為用戶(hù)提供了更接近本地...

    EasonTyler 評(píng)論0 收藏0
  • 前端面試題(3)現(xiàn)代技術(shù)

    摘要:什么是單頁(yè)面應(yīng)用單頁(yè)面應(yīng)用是指用戶(hù)在瀏覽器加載單一的頁(yè)面,后續(xù)請(qǐng)求都無(wú)需再離開(kāi)此頁(yè)目標(biāo)旨在用為用戶(hù)提供了更接近本地移動(dòng)或桌面應(yīng)用程序的體驗(yàn)。流程第一次請(qǐng)求時(shí),將導(dǎo)航頁(yè)傳輸?shù)娇蛻?hù)端,其余請(qǐng)求通過(guò)獲取數(shù)據(jù)實(shí)現(xiàn)數(shù)據(jù)的傳輸通過(guò)或遠(yuǎn)程過(guò)程調(diào)用。 什么是單頁(yè)面應(yīng)用(SPA)? 單頁(yè)面應(yīng)用(SPA)是指用戶(hù)在瀏覽器加載單一的HTML頁(yè)面,后續(xù)請(qǐng)求都無(wú)需再離開(kāi)此頁(yè) 目標(biāo):旨在用為用戶(hù)提供了更接近本地...

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

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

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<