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

資訊專欄INFORMATION COLUMN

滬江前端由H5頁面引起的一場前端數(shù)據(jù)結(jié)構(gòu)討論

Genng / 1600人閱讀

摘要:發(fā)送請(qǐng)求,處理數(shù)據(jù)。在上面這個(gè)場景中,這類數(shù)據(jù)的結(jié)構(gòu)可能是最常碰到的。整個(gè)過程可以簡化成數(shù)據(jù)的變化引起視圖的變化,和現(xiàn)在很多前端框架數(shù)據(jù)驅(qū)動(dòng)思想有幾分相似。至此一個(gè)對(duì)于頁面的抽象出來的數(shù)據(jù)結(jié)構(gòu)雛形基本完成了。

作者:周周(滬江資深Web前端開發(fā)工程師)
本文為原創(chuàng)文章,轉(zhuǎn)載請(qǐng)注明作者及出處

前言

近期在小D十周年活動(dòng)之際,又看到了一個(gè)自家H5專題夢(mèng)工廠生成的頁面。

我與小D十年回憶 >>

回想起了一段往事,現(xiàn)在來看還蠻有趣的。主要是一個(gè)將業(yè)務(wù)逐步抽象成數(shù)據(jù)的過程,對(duì)于當(dāng)時(shí)對(duì)數(shù)據(jù)設(shè)計(jì)等還不太敏感的自己有不小的促進(jìn)作用。于是想通過本文分享下當(dāng)初如何搭建可視化編輯頁面系統(tǒng)中的一些開發(fā)設(shè)計(jì)思路,也希望對(duì)前端伙伴們?cè)跇?gòu)建類似中大型應(yīng)用時(shí)有一定幫助,可以更好地設(shè)計(jì)一些較復(fù)雜的數(shù)據(jù)結(jié)構(gòu)。本文不會(huì)把具體的實(shí)現(xiàn)代碼貼出來,更多的是背后為何要這樣設(shè)計(jì)的一些思考過程,如何把一些業(yè)務(wù)映射到數(shù)據(jù)。有不足之處,還請(qǐng)輕拍。

讓我們一起先來預(yù)覽下編輯器的后臺(tái)界面,編輯伙伴可以像在桌面應(yīng)用中一樣進(jìn)行操作,最后直接生成一個(gè)h5頁面。

背景

當(dāng)時(shí)14年正值H5比較火熱的時(shí)期,業(yè)務(wù)中很多時(shí)候會(huì)碰到一些重復(fù)類似的h5活動(dòng)頁面,開發(fā)幾乎要變成 ctrl+c 和 ctrl+v 了,略顯枯燥。后來涌現(xiàn)出了很多h5頁面編輯應(yīng)用,某秀、某KA等。某一天可愛的老大又在背后看著我們,突然來了一句:

我們要不也搞一個(gè)?

當(dāng)時(shí)反應(yīng)是萬匹草泥馬在頭上奔過: 這個(gè)有點(diǎn)太復(fù)雜了,成本太高,還是不做了吧。不過冷靜下來后,心想做完還可以解放一批開發(fā)同學(xué),挑戰(zhàn)也不小,所以心想

為什么不呢?

于是就開始了一個(gè)可視化編輯頁面系統(tǒng) Web IDE 的打造之旅。從計(jì)劃開始做的那一刻起,其實(shí)是腦中一片空白,后來做了一些小DEMO后,才開始有了點(diǎn)思緒,也不是一蹴而就的。

先舉個(gè)小例子**

場景: 前后端協(xié)作,需求是在頁面上加一個(gè)異步請(qǐng)求的列表模塊。

1.發(fā)送請(qǐng)求,處理數(shù)據(jù)。接口響應(yīng)回來的數(shù)據(jù)可能是:

{
    ...,
    data: {
        list: [
            {id: 1, content: "這是第一條數(shù)據(jù)"},
            {id: 2, content: "這是第二條數(shù)據(jù)"},
            {id: 3, content: "這是第三條數(shù)據(jù)"}
        ],
        total: 4
    }
}

2.根據(jù) list 中的數(shù)據(jù),循環(huán)拼接出需要渲染的DOM結(jié)構(gòu)

  • 1.這是第一條數(shù)據(jù)
  • 2.這是第二條數(shù)據(jù)
  • 3.這是第三條數(shù)據(jù)
  • 3.找到需要追加或者替換的節(jié)點(diǎn),然后加到頁面上。

    在上面這個(gè)場景中,這類數(shù)據(jù)的結(jié)構(gòu)可能是最常碰到的。整個(gè)過程可以理解為,先獲取數(shù)據(jù),再把數(shù)據(jù)轉(zhuǎn)換到渲染視圖里??茨壳傲餍械目蚣埽瑀eact,vue 等都幫我們省略了關(guān)注 DOM 的步驟,在這里我們先拋開一些框架的便利,回歸到原始的步驟,由一個(gè) renderer 方法充當(dāng)。

    +--------+      +----------+      +-------+
    |  data  |  =>  | renderer |  =>  |  DOM  |
    +--------+      +----------+      +-------+
    

    伙伴要問了,這個(gè)流程比較熟悉,但如果做一個(gè) Web IDE 不是就這么幾步吧?

    如何下筆

    需求分析要詳細(xì)

    要下筆時(shí),發(fā)現(xiàn)課題變得復(fù)雜了。很多時(shí)候就會(huì)像下面這張圖中。

    那先緩一緩,先嘗試著拆解成一些小部件來分析。多觀察,多聯(lián)想,多分析。

    制定目標(biāo)

    如何把一個(gè)H5頁面轉(zhuǎn)換成一個(gè)可編輯的狀態(tài)。

    現(xiàn)狀分析

    觀察一個(gè)普通的H5活動(dòng)頁面,試著先抽取幾個(gè)關(guān)鍵元素。試著滑動(dòng)頁面,大致可以猜測這是一個(gè)滑動(dòng)組件,占滿全屏的,交互可以劃分為上下滑動(dòng),可能還有回調(diào)等等,這時(shí)可以發(fā)現(xiàn)一個(gè)H5上可能有一個(gè)或多個(gè)子頁面(分頁),這里面可能將會(huì)涉及到分頁的操作。再看每個(gè)分頁上,有圖片,鏈接,文字等等一些元素,展現(xiàn)形式差異很大,樣式都不一樣,看起來很難統(tǒng)一,不像上面的小例子中可以比較容易地拼湊出,先放一放。但是有兩個(gè)關(guān)鍵點(diǎn)浮現(xiàn)出來了,分頁+元素,一個(gè)h5頁面基本都是由很多頁面和元素組成的,目標(biāo)將轉(zhuǎn)換成如何編輯分頁,如何編輯元素。

    詳細(xì)分析

    再多帶帶看一個(gè)頁面詳細(xì)地分析下:

    可以發(fā)現(xiàn)頁面中有很多元素,大致有:

    圖片

    音頻

    視頻

    文字內(nèi)容

    鏈接

    動(dòng)畫

    其他元素們

    試著抽象一層,一個(gè)頁面可能會(huì)變成下面的結(jié)構(gòu):

    頁面: [
        元素1,
        元素2,
        元素3
    ]
    

    發(fā)現(xiàn)和“小例子”中的結(jié)構(gòu)有點(diǎn)類似,一個(gè)塊包含多個(gè)子塊,照著類似的渲染方式,估計(jì)也能將元素們渲染到頁面上,但樣式卻各不一樣,元素之間的差異比較大,類型又不同,怎么想拼接 list 列表一樣拼呢?試著比較下,上面“小例子”中的列表數(shù)據(jù)包含的是偏內(nèi)容的數(shù)據(jù),把

  • 當(dāng)做一個(gè)元素的話,分析下,這些元素的類型是一樣的,數(shù)據(jù)里包含的是元素內(nèi)容,而樣式等一些其他屬性或事件都是定義在了其他地方,并不在這個(gè)數(shù)據(jù)結(jié)構(gòu)里。再回到元素本身上觀察下,如何抽象,有哪些特征?

    類型

    內(nèi)容

    位置

    大小

    顏色

    背景圖

    鏈接

    其他特征

    元素: {
        類型,
        內(nèi)容,
        位置,
        大小,
        ...
    }
    

    元素上的屬性比較龐大,但還是可以放在一個(gè)元素的對(duì)象里。設(shè)想如果把這些部分也放在該元素的數(shù)據(jù)結(jié)構(gòu)上,不單單有內(nèi)容數(shù)據(jù),還有樣式上的數(shù)據(jù),屬性上的數(shù)據(jù)等等,這樣是否就可以渲染了。那么目標(biāo)有新增,如何去編輯這“龐大”的屬性集合。

    試錯(cuò)

    我們假設(shè)一段需要的帶屬性樣式的元素DOM結(jié)構(gòu):

    content"s context

    相比“小例子”中的

  • 多了很多屬性和結(jié)構(gòu),根據(jù)上面的 DOM 結(jié)構(gòu),用對(duì)象的形式抽象下,格式大致如下:

    element: {
        style: {
            someKeyA: "someValueA",
            someKeyB: "someValueB",
        },
        class: ["someClass"],
        attribute: {
            custom: "someCustomData",
        },
        content: {
            text: "content"s context"
        }
    }
    

    這樣的話,我們就可以通過一個(gè)拼接方法來生成我們想要的結(jié)構(gòu)。這樣一個(gè)關(guān)于元素的數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)就有了雛形。我們可以通過修改元素上一些屬性的值,改變?cè)氐耐庠诒憩F(xiàn)。整個(gè)過程可以簡化成數(shù)據(jù)的變化引起視圖的變化,和現(xiàn)在很多前端框架數(shù)據(jù)驅(qū)動(dòng)思想有幾分相似。

    整理

    通過類似上面很多小 demo 的積累,最后可以整理拼裝下,回到單個(gè)頁面上,除了元素,可能還有一些其他設(shè)置,假想預(yù)留一些字段。

    那么一個(gè)頁面抽象下,格式大致如下:

    page: {
        elements: [
            {
                style: ...,
                class: ...,
                attribute: ...,
                content: ...,
            },
            { element2 },
            { element3 },
            { element4 },
            { element5 },
        ],
        setting: {
            propertyA: {},
            propertyB: "valueB",
            flagC: false,
        }
    }
    

    生成的 DOM 結(jié)構(gòu)大致如下:

    ...

    再把一個(gè)個(gè)單頁拼起來,就變成了我們需要的H5頁面,格式大致如下:

    h5: {
        pages: [
            {
                elements: ...,
                setting: ...,
            },
            {page2},
            {page3},
            {page4},
        ],
        setting: {
            propertyA: {},
            propertyB: "valueB",
            flagC: false,
        }
    }
    

    從一個(gè)個(gè)小元素組成一個(gè)頁面,再由一個(gè)個(gè)頁面組成h5活動(dòng)頁面。至此一個(gè)對(duì)于h5頁面的抽象出來的數(shù)據(jù)結(jié)構(gòu)雛形基本完成了。

    上面的結(jié)構(gòu)沒有展開,展開后你會(huì)發(fā)現(xiàn)這個(gè)大對(duì)象可能上千上萬行,接下來關(guān)注下數(shù)據(jù)和操作界面中的映射關(guān)系了,如何去操作這些數(shù)據(jù),數(shù)據(jù)怎么展現(xiàn),元素和頁面的關(guān)系等等。

    業(yè)務(wù)映射到數(shù)據(jù)

    為何要操作數(shù)據(jù),而不是去操作DOM?

    這也是在前期開發(fā)中踩過的坑,照著“所見即所得”的模式,像富文本編輯器一樣,輸入修改完就是最終輸出的內(nèi)容,也未嘗不可,實(shí)現(xiàn)時(shí)習(xí)慣使用 jQuery 的伙伴很容易會(huì)聯(lián)想到直接操作 DOM,比如一個(gè)元素的定位,使用 jquery-ui 的 draggble 拖拖拽拽很方便的定位,最后產(chǎn)出的就是最后實(shí)際的HTML。但放在實(shí)際場景中后,會(huì)發(fā)現(xiàn)拓展性兼容性不太友好。特別是在后期再去操作一段成品的 DOM 結(jié)構(gòu)會(huì)變得比較麻煩,比如一個(gè)定位的數(shù)據(jù),成品中的數(shù)據(jù)會(huì)看起來比較“死”,在適配不同屏幕時(shí),計(jì)算對(duì)應(yīng)的值會(huì)比較累。而如果是操作數(shù)據(jù)的話,可以在渲染之前對(duì)數(shù)據(jù)進(jìn)行些處理,最后的產(chǎn)出就變得比較靈活,將數(shù)據(jù)層和視圖層抽離的比較獨(dú)立,拓展起來也比較容易。

    映射關(guān)系

    如何把這些界面的業(yè)務(wù)抽象成數(shù)據(jù)操作,首先還是簡單分析整理下。一個(gè)可視化編輯應(yīng)用的操作有很多,這里只舉幾個(gè)類型的數(shù)據(jù)操作。用戶通過操作(比如輸入、拖拽、移動(dòng)、點(diǎn)擊等)來改變?cè)氐膶傩灾怠?/p>

    用腦圖發(fā)散一下有哪些功能:

    頁面的增刪改查

    元素的增刪改查

    歷史記錄的操作

    用戶操作

    其他

    讓我們回到已經(jīng)制定的目標(biāo)上,如何編輯頁面,如何編輯元素。下面舉幾個(gè)例子

    頁面編輯
    一個(gè)H5由多個(gè)頁面組成,由幾個(gè){元素}組成的[元素集合],此類關(guān)系通??梢杂脭?shù)組來表示。

    將頁面集合簡單成抽象成數(shù)據(jù)的操作:

        +-------------+
        |             |
        +-------------+
    
        => pages: [], index: -1
    

    新增頁面時(shí),在 pages 數(shù)組中 push 一個(gè)"page 1"的實(shí)例對(duì)象,再通過索引取到該實(shí)例數(shù)據(jù), 然后通過渲染方法將對(duì)應(yīng)的視圖渲染到界面中,這個(gè)關(guān)系鏈就基本完成了。

        +-------------+
        |    page 1   |
        +-------------+
    
        => pages: [ page1 ], index: 0
    

    交換頁面順序

        +-------------+
        |    page 2   |
        +-------------+
        |    page 1   |
        +-------------+
    
        => pages: [ page2, page1 ], index: 1
    

    通過數(shù)組的兩個(gè)值的順序交換即可以實(shí)現(xiàn)兩個(gè)頁面的順序交換,發(fā)現(xiàn)很多場景只需要通過一些數(shù)組最基本的操作就可以實(shí)現(xiàn)一些看起來復(fù)雜的功能,而困難的更多是如何找到這一層映射的關(guān)系。

    元素操作

    元素有多種屬性組成,多個(gè){屬性鍵值對(duì)}組成的{元素},此類關(guān)系通常可以用對(duì)象鍵值對(duì)來表示。

    在元素對(duì)象上不斷拓展需要變化的屬性,比如元素的尺寸位置:

    element: {
        style: {
            "top",
            "left",
            "width",
            "height",
        },
        ...
    }
    

    可以設(shè)計(jì)如上圖四個(gè)輸入框,每個(gè)輸入框?qū)?yīng)每一個(gè)屬性值,這樣一個(gè)簡單的元素屬性編輯控件就好了,依次類推,每加一個(gè)可編輯屬性就對(duì)應(yīng)加一個(gè)編輯控件?;旧隙际且詋ey-value的形式來操作。整個(gè)過程簡化成用戶通過界面的輸入修改操作數(shù)據(jù),數(shù)據(jù)更改后視圖對(duì)應(yīng)重新渲染一遍。

    根據(jù)不斷的嘗試和增加,最后結(jié)構(gòu)變成了類似如下的格式:

    element: {
        id: 1,
        role: {
            type,
            value
        },
        style: {
            "top",
            "left",
            "width",
            "height",
            "transform",
            ...
        },
        inner: {
            html: "rich text",
            style:{
                "background-image",
                "background-color",
                "background-size",
                "opacity",
                "color",
                "font-size",
                "text-align",
                "border-radius",
                ...
            }
        },
        attribute:{
            "animation-sequence",
        }
    }
    
    +--------+--------+----------+---------+-------------+
    |  id    |  role  |  style   |  inner  |  attribute  |
    +--------+--------+----------+---------+-------------+
    |   1    |  link  |    ...   |   ...   |     ...     |
    +--------+--------+----------+---------+-------------+
    |   2    |  text  |    ...   |   ...   |     ...     |
    +--------+--------+----------+---------+-------------+
    

    完善后,一個(gè)元素的結(jié)構(gòu)已經(jīng)變得相對(duì)龐大了,包含了非常多的屬性,隨之而來的也是非常多對(duì)應(yīng)的屬性編輯控件,也是相對(duì)比較復(fù)雜的地方。

    歷史操作

    怎么抽象設(shè)計(jì)?這在平時(shí)業(yè)務(wù)場景里并不多。先分析下歷史要什么?主要就是撤銷和恢復(fù),用戶可以 ctrl+z 回到上一個(gè)狀態(tài)。歷史這個(gè)大集合里肯定有多個(gè)歷史狀態(tài),由多個(gè){歷史}組成[歷史集合],于是就想到了數(shù)組。新狀態(tài)和老狀態(tài)的區(qū)別是什么?可能就是有了新的操作,數(shù)據(jù)有了變化,那么把這時(shí)的數(shù)據(jù)保存起來,塞到歷史里,相當(dāng)于是一個(gè) push 的操作,看起來可行。再假如需要回到上一個(gè)狀態(tài),可以設(shè)置個(gè)索引 index, 將 index 指向到前一個(gè),就拿到了前一個(gè)狀態(tài)。

                       | -- push
                +------v------+
      index --> |   status 3  |
                +-------------+
                |   status 2  |
                +-------------+
                |   status 1  |
                +------|------+
                       v -- shift
    

    抽取幾個(gè)關(guān)鍵點(diǎn):

    - 有多個(gè)狀態(tài)        -> 數(shù)組
    - 不同狀態(tài)之間指向   -> 數(shù)組的索引值, 游標(biāo)
    - 可以做個(gè)步數(shù)限制   -> 數(shù)組的長度
    

    場景:有一個(gè)新的操作,即將新的數(shù)據(jù)插入到歷史中

    history.push(statusNew);
    

    場景:如果滿了,將最先插入的數(shù)據(jù)拿出來

    history.shift();
    

    場景:撤銷一步,將游標(biāo)指向到前一個(gè),取到前一個(gè)狀態(tài)。重做一步同理。根據(jù)這時(shí)的數(shù)據(jù)重新渲染,那么界面上也就回到了前一步的狀態(tài)。

    cursor --;
    callback(history[cursor]);
    

    那么history的結(jié)構(gòu)就可能長成如下:

    [
        {status1},
        {status2},
        {status3},
        {statusNew},
    ]
    

    這樣一個(gè)簡單的歷史數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)就完成了。

    留個(gè)問題: 如果撤回到了上幾步,然后繼續(xù)操作,整個(gè)歷史狀態(tài)該怎么處理?

    最后

    最后再通過組裝整合,一個(gè)可視化編輯器主要的功能大致就滿足了。再重新看下操作界面上的數(shù)據(jù),可以劃分為兩個(gè)部分,一個(gè)前臺(tái)頁面數(shù)據(jù),一個(gè)后臺(tái)交互數(shù)據(jù),大致如下:

    回顧上面的過程,已經(jīng)從一個(gè)簡單的數(shù)據(jù)列表渲染到具有前后臺(tái)復(fù)雜型數(shù)據(jù)交互的WebIDE,但從數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)形式上看,本質(zhì)上變化其實(shí)并不是很大,只是

  • 變成了,等,里面包含的數(shù)據(jù)量也增加了許多。會(huì)不會(huì)發(fā)現(xiàn)這個(gè)數(shù)據(jù)雖然看起來十分龐大復(fù)雜,但也有幾分清晰簡單。而你的角色更像是一位建筑設(shè)計(jì)師,把握整個(gè)結(jié)構(gòu)框架,然后再管理一磚一瓦。

    上述的過程在開發(fā)其他項(xiàng)目時(shí)同樣適用,在開始設(shè)計(jì)時(shí),要一下子腦補(bǔ)出整個(gè)設(shè)計(jì)是比較困難的,特別是對(duì)某一個(gè)事物從一無所知到有點(diǎn)概念,從0到1的過程,客觀的說這并不容易??梢韵仍囍殡x出幾個(gè)關(guān)鍵步驟,寫幾個(gè)小模塊,把關(guān)鍵路徑走通,在初期十分有效,隨后再這些看似零散的小組件拼裝起來,往往這個(gè)雛形會(huì)比一開始想的清晰很多,如此反復(fù),整個(gè)設(shè)計(jì)也會(huì)變得更加清晰飽滿。數(shù)據(jù)的設(shè)計(jì)也是相對(duì)應(yīng)的,由一個(gè)個(gè)小的數(shù)據(jù)組成,漸漸的便會(huì)形成一個(gè)比較龐大的數(shù)據(jù),這時(shí)代碼可能不是最關(guān)鍵的,而是如何合理有效清晰地管理這些數(shù)據(jù),可能更像是后端數(shù)據(jù)庫管理一樣。往往需要經(jīng)過不斷的試錯(cuò)走些歪路的過程,最后會(huì)慢慢得心應(yīng)手一點(diǎn)。好設(shè)計(jì)是不斷迭代出來的,勇敢試錯(cuò),不怕踩坑,有句話叫,坑踩的深才銘心刻骨。


    iKcamp原創(chuàng)新書《移動(dòng)Web前端高效開發(fā)實(shí)戰(zhàn)》已在亞馬遜、京東、當(dāng)當(dāng)開售。

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

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

    相關(guān)文章

    • 滬江前端H5頁面引起一場前端數(shù)據(jù)結(jié)構(gòu)討論

      摘要:發(fā)送請(qǐng)求,處理數(shù)據(jù)。在上面這個(gè)場景中,這類數(shù)據(jù)的結(jié)構(gòu)可能是最常碰到的。整個(gè)過程可以簡化成數(shù)據(jù)的變化引起視圖的變化,和現(xiàn)在很多前端框架數(shù)據(jù)驅(qū)動(dòng)思想有幾分相似。至此一個(gè)對(duì)于頁面的抽象出來的數(shù)據(jù)結(jié)構(gòu)雛形基本完成了。 作者:周周(滬江資深Web前端開發(fā)工程師)本文為原創(chuàng)文章,轉(zhuǎn)載請(qǐng)注明作者及出處 前言 近期在小D十周年活動(dòng)之際,又看到了一個(gè)自家H5專題夢(mèng)工廠生成的頁面。 showImg(htt...

      xialong 評(píng)論0 收藏0
    • 有價(jià)值的前端技術(shù)點(diǎn)

      摘要:借著產(chǎn)品層面的功能和視覺升級(jí),我們用對(duì)它進(jìn)行了一次技術(shù)重構(gòu)。前端優(yōu)化是一個(gè)讓人技術(shù)提升的,希望你也能從這里學(xué)到一些東西。年最流行的前端鏈接我們每周會(huì)給多名前端開發(fā)者發(fā)送新聞郵件。 面試 -- 網(wǎng)絡(luò) HTTP 現(xiàn)在面試門檻越來越高,很多開發(fā)者對(duì)于網(wǎng)絡(luò)知識(shí)這塊了解的不是很多,遇到這些面試題會(huì)手足無措。本篇文章知識(shí)主要集中在 HTTP 這塊。文中知識(shí)來自 《圖解 HTTP》與維基百科,若有錯(cuò)...

      microelec 評(píng)論0 收藏0
    • 滬江網(wǎng)校前端架構(gòu)漫談

      摘要:滬江網(wǎng)校現(xiàn)在的架構(gòu)是怎么樣的基于以上原則,在搭建架構(gòu)的時(shí)候,經(jīng)過討論和嘗試,我們最終確定出個(gè)方向,模塊化,組件化,工程化,規(guī)范化。 作者: 未來本文轉(zhuǎn)自互聯(lián)網(wǎng)技術(shù)聯(lián)盟(ITA1024)技術(shù)分享實(shí)錄 正文如下 沒有統(tǒng)一架構(gòu)的時(shí)候是怎樣的一種情況? 起初前端是沒有架構(gòu)的,大家只是在完成一個(gè)一個(gè)的頁面。我們來看看會(huì)發(fā)生什么。 A同事是一個(gè)非常有意思的人,他喜歡把跟這個(gè)頁面相關(guān)的所有的JS都...

      OnlyLing 評(píng)論0 收藏0
    • 前端補(bǔ)集 - 收藏集 - 掘金

      摘要:原文地址一個(gè)非常適合入門學(xué)習(xí)的博客項(xiàng)目前端掘金一個(gè)非常適合入門學(xué)習(xí)的項(xiàng)目,代碼清晰結(jié)構(gòu)合理新聞前端掘金介紹一個(gè)由編寫的新聞。深入淺出讀書筆記知乎專欄前端專欄前端掘金去年的一篇老文章,恰好今天專欄開通,遷移過來。 破解前端面試(80% 應(yīng)聘者不及格系列):從閉包說起 - 掘金修訂說明:發(fā)布《80% 應(yīng)聘者都不及格的 JS 面試題》之后,全網(wǎng)閱讀量超過 6W,在知乎、掘金、cnodejs ...

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

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

    0條評(píng)論

    閱讀需要支付1元查看
    <