首頁

2018年UI設(shè)計簡潔化成為趨勢代表

藍藍設(shè)計的小編

根據(jù)統(tǒng)計2017年前半年的統(tǒng)計說明,前半年的設(shè)計風格主要以減約化為主,能更加讓用戶體驗即簡約便捷的方式展現(xiàn)給廣大群體與用戶。比如說蘑菇節(jié)、唯品會、AMII等,近幾年來,人們的審美也在漸漸發(fā)生變化,作為一個UI設(shè)計師不僅要會設(shè)計頁面,還要會設(shè)計用戶喜歡的界面。

HTML基礎(chǔ)應(yīng)用

seo達人

如果您想訂閱本博客內(nèi)容,每天自動發(fā)到您的郵箱中, 請點這里

本篇文章基本介紹了學習HTML的一些基礎(chǔ)的語法與標簽,標簽包括換行</br>,加粗<b>,下劃線<hr/>斜體字<i>,字體<h1....6>,標題<title>......

<small>

<small> 標簽呈現(xiàn)小號字體效果

。如果被包圍的字體已經(jīng)是字體模型所支持的最小字號,那么 <small> 標簽將不起任何作用。

<small> 標簽也可以嵌套,從而連續(xù)地把文字縮小。每個 <small> 標簽都把文本的字體變小一號,直到達到下限的一號字。

<sub>表示下標<sup>表示上標。

<p>與<pre>有些類似

pre 元素可定義預(yù)格式化的文本。被包圍在 pre 元素中的文本通常會保留空格和換行符。而文本也會呈現(xiàn)為等寬字體。

<pre> 標簽的一個常見應(yīng)用就是用來表示計算機的源代碼。

p 元素會自動在其前后創(chuàng)建一些空白。

<ul>與<ol>

兩者都指列表,前者是無序的,后者是有序的。

[html] view plain copy
  1. <html>  
  2. <head>  
  3. <span style="color:#33ff33;"><title></span>HTML 5 Tag Reference</title>  
  4. </head>  
  5. <body>  
  6. <span style="color:#33ff33;"><h1></span>The content of the document......<span style="color:#33ff33;"><br/></span></h1>  
  7. <h2>The content of the document......<br/></h2>  
  8. <h3>The content of the document......<br/></h3>  
  9. <h4>The content of the document......<br/></h4>  
  10. <h5>The content of the document......</h5>  
  11.   
  12. <h1>The content of the document......<br/></h1>  
  13. <h1><span style="color:#33ff33;"><small></span>The content of the document......</small><br/></h1>  
  14.   
  15. <span style="color:#33ff33;"><pre></span>  
  16. HTML基礎(chǔ)應(yīng)用  
  17.   
  18. HTML基礎(chǔ)應(yīng)用學習和掌握HTML語言的基本語法,常用的標簽的使用方法;學會使用HTML設(shè)計基本的簡單  
  19.   
  20. 網(wǎng)頁。  
  21.   
  22. </pre>  
  23. <span style="color:#33ff33;"><hr/></span>  
  24. <span style="color:#33ff33;"><p>  
  25. <i></span>This is some text in a very short paragraph</i>  
  26. </p>  
  27. <span style="color:#33ff33;"><b></span>The content of the document......</b></br>  
  28.   
  29. a<span style="color:#33ff33;"><sup>2</sup><sub>0</sub></span>+b<sup>2</sup><sub>0</sub>=c<sup>2</sup><sub>0</sub>  
  30.   
  31. <span style="color:#33ff33;"><ul></span>  
  32. <li>sports</li>  
  33. <li> food </li>  
  34. <li> drink </li>  
  35. <li> friends </li>  
  36. </ul>  
  37. <span style="color:#33ff33;"><ol></span>  
  38.     <li>sports</li>  
  39.     <li> drink</li>  
  40.     <li> friends</li>  
  41. </ol>  
  42.   
  43. <span style="color:#33ff33;"><dl> </span>  
  44. <dt>計算機</dt>   
  45.     <dd>用來計算的儀器 ... ...</dd>   
  46. <dt>顯示器</dt>   
  47.     <dd>以視覺方式顯示信息的裝置 ... ...</dd>   
  48. </dl>   
  49.   
  50. </body>  
  51. </html>  

效果:

其中<title>體現(xiàn)在最上方的搜索欄中。

 


藍藍設(shè)計sillybuy.com )是一家專注而深入的界面設(shè)計公司,為期望卓越的國內(nèi)外企業(yè)提供卓越的UI界面設(shè)計、BS界面設(shè)計 、 cs界面設(shè)計 、 ipad界面設(shè)計 、 包裝設(shè)計 、 圖標定制 、 用戶體驗 、交互設(shè)計、 網(wǎng)站建設(shè) 、平面設(shè)計服務(wù)

UI設(shè)計培訓:揭開UI設(shè)計神秘面紗

藍藍設(shè)計的小編

今天來給大家講解一下什么是UI設(shè)計,UI設(shè)計的類別,UI設(shè)計包含了哪些設(shè)計呢?手機端:手機、平板上的一些APP界面設(shè)計,例如QQ、微信的軟件界面設(shè)計,小米、oppo主題商店里面的一些主題的設(shè)計等。

用Flow提升前端代碼健壯性

seo達人

如果您想訂閱本博客內(nèi)容,每天自動發(fā)到您的郵箱中, 請點這里

看一段常見代碼:

//例1 function foo(x) { return x + 10 }
foo('Hello!') //例2 function main(params){ //fn1函數(shù)獲取了一個數(shù)據(jù) var object = fn1(params) //fn2根據(jù)獲數(shù)據(jù),產(chǎn)生一個結(jié)果 var result = fn2(object) return result
}
    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

例2很明顯,這個過程非常的‘黑’,如果你想知道object包含什么數(shù)據(jù)的話,可以:

  1. 打印一下 console.log(object)
  2. 查看fn1的注釋,并且保佑它的注釋是正確,全面的
  3. 或結(jié)合1,2,然后仔細查看fn1的源碼,希望它不是很復雜

被上述步驟折磨完之后,終于能真正的寫點代碼了,但是依舊得非常小心,因為這里還有另一個函數(shù):fn2

在修改代碼的時候,得保證result這個結(jié)果沒有被影響,那么如何保證呢?

很簡單,重復上面的步驟,搞清楚result包含的數(shù)據(jù),在測試的時候確保其數(shù)據(jù)跟原先的相同。 

動態(tài)類型一時爽,代碼重構(gòu)火葬場 
知乎傳送門:為什么說“動態(tài)類型一時爽,代碼重構(gòu)火葬場”

是時候徹底優(yōu)化這個煩人的問題了

引入類型系統(tǒng)

其實問題的根源就是因為javascript太靈活了,在代碼運行期間幾乎可以做任何的修改,

沒有東西可以在代碼層面保證 某個變量,某個函數(shù) 跟預(yù)期的一致。

所以要加入類型系統(tǒng)來確保代碼的可靠性,在后期維護的時候同樣能夠傳達出有效的信息

Flow & TypeScript

Flow是個JavaScript的靜態(tài)類型檢查工具,由Facebook出品的開源碼項目,問世只有兩三年,是個相當年輕的項目。簡單來說,它是對比TypeScript語言的解決方式。

會有這類解決方案,起因是JavaScript是一種弱(動態(tài))數(shù)據(jù)類型的語言,弱(動態(tài))數(shù)據(jù)類型代表在代碼中,變量或常量會自動依照賦值變更數(shù)據(jù)類型,而且類型種類也很少,這是直譯式腳本語言的常見特性,但有可能是優(yōu)點也是很大的缺點。優(yōu)點是容易學習與使用,缺點是像開發(fā)者經(jīng)常會因為賦值或傳值的類型錯誤,造成不如預(yù)期的結(jié)果。有些時候在使用框架或函數(shù)庫時,如果沒有仔細看文件,亦或是文件寫得不清不楚,也容易造成誤用的情況。

這個缺點在應(yīng)用規(guī)?;瘯r,會顯得更加嚴重。我們在團隊開發(fā)協(xié)同時,一般都是通過統(tǒng)一的代碼規(guī)范,來降低這個問題的發(fā)生,但JS語言本身無法有效阻止這些問題。TypeScript這樣的強(靜態(tài))類型的JavaScript超集語言就開始流行,用嚴格的角度,以JavaScript語言為基底,來重新打造另一套具有強(靜態(tài))類型特性的語言,就如同Java或C#這些語言一樣,這也是為什么TypeScript稱自己是企業(yè)級的開發(fā)JavaScript解決方案。

TypeScript存在的問題

TypeScript自然有它的市場,但它有一些明顯的問題:

  • 首先是JavaScript開發(fā)者需要再進一步學習,內(nèi)容不少
  • 有一定陡峭的學習曲線
  • 已經(jīng)在使用的應(yīng)用代碼,需要整個改用TypeScript代碼語法,才能發(fā)揮完整的功用。這對很多已經(jīng)有內(nèi)部代碼庫的大型應(yīng)用開發(fā)團隊而言,將會是個重大的決定,因為如果不往全面重構(gòu)的路走,將無法發(fā)揮強(靜態(tài))類型語言的最大效用eg:angular2

*所以許多現(xiàn)行的開源碼函數(shù)庫或框架,并不會直接使用TypeScript作為代碼的語言,另一方面因為TypeScript并非是普及到一定程度的語言。 
當然TypeScript也是個活躍的開源碼項目,發(fā)展到現(xiàn)在也有一段時間,它的背后有微軟公司的支持,全新打造過的Angular2框架中(由Google主導),也采用了TypeScript作為基礎(chǔ)的開發(fā)語言*。

Flow你的新選擇

現(xiàn)在,Flow提供了另一個新的選項,它是一種強(靜態(tài))類型的輔助檢查工具。Flow的功能是讓現(xiàn)有的JavaScript語法可以事先作類型的聲明(定義),在開發(fā)過程中進行自動檢查,當然在最后編譯時,一樣可以用babel工具來移除這些標記。

相較于TypeScript是另外重新制定一套語言,最后再經(jīng)過編譯為JavaScript代碼來運行。Flow走的則是非強制與非侵入性的路線。

Flow的優(yōu)點

  • 且易學易用 
    它的學習曲線沒有TypeScript來得高,雖然內(nèi)容也很多,但半天學個大概,就可以漸進式地開始使用
  • Flow從頭到尾只是個檢查工具 
    不是新的程序語言或超集語言,所以它可以與各種現(xiàn)有的JavaScript代碼兼容,如果你哪天不想用了,就去除掉標記就是回到原來的代碼,沒什么負擔

so

選擇flow.js工具而不選擇TypeScript強類型語言的原因顯而易見? 
flow.js對工程的侵入性很小,無需大量的額外工作就能使用起來

從一個小例子演示

這種類型不符的情況在代碼中非常容易發(fā)生,例如上面的例1:

function foo(x) { return x + 10 }

foo('Hello!')
    
  • 1
  • 2
  • 3
  • 4
  • 5

x這個傳參,我們在函數(shù)聲明時希望它是個數(shù)字類型,但最后使用調(diào)用函數(shù)時則用了字符串類型。最后的結(jié)果會是什么嗎? “Hello!10”,這是因為加號(+)在JavaScript語言中,除了作為數(shù)字的加運算外,也可以當作字符串的連接運算。想當然這并不是我們想要的結(jié)果。

聰明如你應(yīng)該會想要用類型來當傳參的識別名,容易一眼看出傳參要的是什么類型,像下面這樣:

function foo(number) { return number + 10 }
    
  • 1
  • 2
  • 3
  • 如果在復合類型的情況,例如這個傳參的類型可以是數(shù)字類型也可以是布爾類型,你又要如何寫得清楚?
  • 如果是個復雜的對象類型時,結(jié)構(gòu)又該如何先確定好?
  • 另外還有函數(shù)的返回類型又該如何來寫?

利用Flow類型的定義方式,來解決這個小案例的問題,可以改寫為像下面的代碼:

// @flow function foo(x: number): number { return x + 10 }

foo('hi')
    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

當使用非數(shù)字類型的值作為傳入值時,就會出現(xiàn)由Flow工具發(fā)出的警告消息,像下面這樣:

[flow] Cannot call foo with 'hi' bound to x because string 1 is incompatible with number 2. (a.getting-start.js:6:5)

如果是要允許多種類型也是很容易可以加標記的,假使這個函數(shù)可以使用布爾與數(shù)字類型,但返回可以是數(shù)字或字符串,就像下面這樣修改過:

// @flow function foo(x: number | boolean): number | string { if (typeof x === 'number') { return x + 10 } return 'x is boolean' }

foo(1)
foo(true)
foo(null) // 這一行有類型錯誤消息
    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

在多人協(xié)同開發(fā)某個有規(guī)模的JavaScript應(yīng)用時,這種類型的輸出輸入問題就會很常遇見。如果利用Flow工具的檢查,可以避免掉許多不必要的類型問題。

真實案例

可能你會認為Flow工具只能運用在小型代碼中,其實不然,Vue源碼中大量使用flowjs中類型檢測: 
此處輸入圖片的描述

Flow使用

此處輸入圖片的描述 
1. flow init 
2. // @flow 或 /* @flow */ 
3. IDE插件 或 flow check 
在Visual Studio Code中因為它內(nèi)建TypeScript與JavaScript的檢查功能,如果要使用Flow工具來作類型檢查,需要在用戶設(shè)置中,加上下面這行設(shè)置值以免沖突:

“javascript.validate.enable”: false

4 . babel插件在編譯時就會一并轉(zhuǎn)換Flow標記

{
  "plugins": [ "transform-flow-strip-types" ] }
    
  • 1
  • 2
  • 3
  • 4
  • 5

Flow支持的數(shù)據(jù)類型

Flow支持原始數(shù)據(jù)類型,如下面的列表:

  • boolean
  • number
  • string
  • null
  • void

類型別名&常見語法

// @flow export type Test = {
  titleOne?: string,
  titleTwo: ?string
} var a: Test = {titleOne:"3",titleTwo:4} var b:string = "" //any export type NavigationGestureDirection = 'horizontal' | 'vertical';

type T = Array<string> var x: T = []
x["Hi"] = 2 //有Flow警告 type TT = Array<Test> var xx:TT = []
xx = [{titleOne: '1',
  titleTwo: false}]

type MyObject = {
  foo: number,
  bar: boolean,
  baz: string,
};

let val:MyObject = {foo:2,bar:false,baz:'444'}; var val1: MyObject = {foo:2,bar:false,baz:null}; var val2: MyObject = {foo:2,bar:false}; function method(val: MyObject):MyObject { return {foo:2,bar:false,baz:'2'}} class Foo { constructor(val: MyObject) { /* ... */ } }
    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

React中的應(yīng)用

如果你在React class里面使用了React.PropTypes規(guī)范,你可以對JSX上的attributes做靜態(tài)類型檢查:

var Hello = React.createClass ({
  propTypes: {
    name: React.PropTypes.string.isRequired
  } ... });
//<Hello/> //Flow就會發(fā)現(xiàn) 缺少屬性的錯誤
//<Hello name={42}/>//屬性類型的錯誤
    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
import * as React from 'react'; type Props = {
  foo: number,
  bar?: string,
}; function MyComponent(props: Props) {
  props.doesNotExist; // Error! You did not define a `doesNotExist` prop. return <div>{props.bar}</div>;
}

<MyComponent foo={42} />
    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

更多關(guān)于支持React的細節(jié) 請移步 https://flow.org/en/docs/react/components/

藍藍設(shè)計sillybuy.com )是一家專注而深入的界面設(shè)計公司,為期望卓越的國內(nèi)外企業(yè)提供卓越的UI界面設(shè)計、BS界面設(shè)計 、 cs界面設(shè)計 、 ipad界面設(shè)計 、 包裝設(shè)計 、 圖標定制 、 用戶體驗 、交互設(shè)計、 網(wǎng)站建設(shè) 平面設(shè)計服務(wù)

如何看待CSS中BEM的命名方式?

seo達人

如果您想訂閱本博客內(nèi)容,每天自動發(fā)到您的郵箱中, 請點這里

BEM的意識就是塊(block)、元素(element)、修飾符(modifier),是由yandex團隊提出的一種CSS Class命名方法。

任何一個東西的存在都有其存在的道理,如果他毫無價值,那么肯定會被淘汰,后人可能都不了解,甚至都不會出現(xiàn)在后人的世界里。

如何看待CSS中BEM的命名方式?

關(guān)于BEM命名其最大的爭議就是其命名風格,它鼓勵一級一級的寫的非常具體,但是會很長。如此常的命名會影響書寫效率,名稱過長代碼量就會增多,文件體積就會變大(在gzip下這個不算是個問題),從而會影響傳輸速度,用戶體驗度就低,但是作為一個職業(yè)人我們都不能單純把個人喜好和習慣作為借口來拒絕或否定其用途。

風格對于使用者來說并不是很重要,關(guān)鍵的是看其效果。正所謂人們常說的“不看療程,看療效”。

從擴展性上來看,嵌套過多閱讀性差,超過3層就很難閱讀了;嵌套越多,選擇器的層級也會隨之增多,那么性能不知不覺就會變差;如此長的名字,書寫上想沖突都難。

從編程原則上來說,這種命名方式不會暴露抽象類。假如樣式變了需要繼承另一個抽象類,不需要改HTML,只需要改css即可。

團隊開發(fā)中,風格無非是一種形式,可以約束人們達到一定程度上的統(tǒng)一。內(nèi)部溝通會極大降低溝通成本。

BEM命名的方法雖然有自身的不足之處,但至少他可以使我們命名的時候達到一定的統(tǒng)一,我們可以學習其優(yōu)秀的方面將其納為己用。在實際項目開發(fā)中將其巧妙而又靈活的運用起來也未嘗不是一件壞事。

藍藍設(shè)計sillybuy.com )是一家專注而深入的界面設(shè)計公司,為期望卓越的國內(nèi)外企業(yè)提供卓越的UI界面設(shè)計、BS界面設(shè)計 、 cs界面設(shè)計 、 ipad界面設(shè)計 、 包裝設(shè)計 、 圖標定制 、 用戶體驗 、交互設(shè)計、 網(wǎng)站建設(shè) 平面設(shè)計服務(wù)

JS作用域、立即執(zhí)行函數(shù)、閉包

seo達人

如果您想訂閱本博客內(nèi)容,每天自動發(fā)到您的郵箱中, 請點這里

作用域    

首先先介紹一下作用域等一些基礎(chǔ)概念。

 每個JavaScript函數(shù)都是一個對象,對象中有些屬性我們可以訪問,但有些不可以,這些屬性僅供JavaScript引擎存取,[[scope]]就是其中一個。

[[scope]] : 指的就是我們所說的作用域,其中存儲了執(zhí)行期上下文的集合

作用域鏈 : [[scope]] 中所存儲的執(zhí)行期上下文對象的集合,這個集合呈鏈式鏈接,我們把這種鏈接叫做作用域鏈。

運行期上下文  : 當函數(shù)執(zhí)行時,會創(chuàng)建一個稱為執(zhí)行期上下文的內(nèi)部對象(AO)。一個執(zhí)行期上下文定義了一個函數(shù)執(zhí)行的環(huán)境,函數(shù)每次執(zhí)行時對應(yīng)的執(zhí)行環(huán)境都是的,所以多次調(diào)用一個函數(shù)會導致創(chuàng)建多個執(zhí)行上下文,當函數(shù)執(zhí)行完畢,它所產(chǎn)生的執(zhí)行上下文被銷毀。

查找變量  :從作用域鏈的頂端依次向下查找。

下面舉一些例子:

[html] view plain copy
  1. function a(){  
  2.     function b(){  
  3.         function c(){  
  4.   
  5.         }  
  6.         c();  
  7.     }  
  8.     b();  
  9. }  
  10. a();  
  11.   
  12.   
  13. a defined a.[[scope]] ----> 0 : GO          //a定義的時候產(chǎn)生GO對象  
  14. a doing   a.[[scope]] ----> 0 : aAO           //a執(zhí)行的時候新產(chǎn)生AO對象  
  15.                             1 : GO  
  16.   
  17. b defined  b.[[scope]] ----> 0 : aAO            //子級b定義會繼承父級a運行時產(chǎn)生的對象  
  18.                              1 : GO   
  19. b doing    b.[[scope]] ---->  0 : bAO            //子級b新產(chǎn)生AO對象  
  20.                               1 : aAO   
  21.                               2 : GO   
  22.                                 
  23. c defined  c.[[scope]] ---->  0 : bAO            //c定義時會繼承b運行時產(chǎn)生的屬性  
  24.                               1 : aAO   
  25.                               2 : GO                          
  26. c doing     c.[[scope]] ----> 0 : cAO            //c執(zhí)行時同時又產(chǎn)生新的AO  
  27.                               1 ;bAO   
  28.                               2 : aAO   
  29.                               3 : GO   

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

之前學過函數(shù)的定義、函數(shù)表達式,還有一種函數(shù)叫做立即執(zhí)行函數(shù)。

立即執(zhí)行函數(shù):函數(shù)執(zhí)行過后立即被銷毀。

立即執(zhí)行函數(shù)的官方寫法:

[html] view plain copy
  1. // 立即執(zhí)行函數(shù)的官方寫法  
  2. (function() {} ());  W3C建議此種  
  3. (function() {})();  

針對初始化功能的函數(shù),可以有參數(shù)。

[html] view plain copy
  1. var num = function (a,b){  
  2.     return a + b;  
  3. }(1,2);  
  4.   
  5. (function abc(){  
  6.     var a = 123;  
  7.     var b = 234;  
  8.     console.log(a+b);  
  9. }())  

只有表達式才能被執(zhí)行符號執(zhí)行,能被執(zhí)行符號執(zhí)行的表達式,函數(shù)名字會被自動忽略。

[html] view plain copy
  1. function test(){  
  2.     console.log("a");  
  3. }()    會出現(xiàn)語法解析錯誤,因為括號前面是函數(shù)聲明  
  4.   
  5. (+ function test( ){  
  6.     console.log('a');  
  7. }())                    -------->打印出a  

下面是一道曾阿里面試題

[html] view plain copy
  1. function test(a, b, c, d){  
  2.     console.log(a + b + c + d);  
  3. }(1, 2, 3, 4);  
  4.   
  5. // 不報錯也沒有執(zhí)行        

下面是幾道經(jīng)典的例題,可以參考一下:

[html] view plain copy
  1.   
[html] view plain copy
  1. function test(){  
  2.     var arr = [];  
  3.     for(var i = 0; i < 10; i ++){  
  4.         arr[i] = function (){  
  5.             console.log(i);  
  6.         }  
  7.     }  
  8.     return arr;  
  9. }  
  10. var myArr = test();  
  11. for(var j = 0; j < 10; j++){  
  12.     myArr[j]();  
  13. }    
[html] view plain copy
  1.   
[html] view plain copy
  1. // 輸出:10個10  

那么采用立即執(zhí)行函數(shù)呢?會有怎樣的結(jié)果呢?

[html] view plain copy
  1. function test(){  
  2.     var arr = [];  
  3.     for(var i = 0; i < 10; i ++){  
  4.         (function(j){  
  5.             arr[i] = function (){  
  6.             console.log(j + " ");  
  7.         }  
  8.         }(i))  
  9.     }  
  10.     return arr;  
  11. }  
  12. var myArr = test();  
  13. for(var j = 0; j < 10; j++){  
  14.     myArr[j]();  
  15. }   
[html] view plain copy
  1.   
[html] view plain copy
  1. // 輸出結(jié)果  0 1 2 3 4 5 6 7 8 9   

大家可以自行思考一下。

閉包

閉包的現(xiàn)象:當內(nèi)部函數(shù)保存到外部時會產(chǎn)生閉包。


閉包會導致原有的作用域鏈不釋放,造成內(nèi)存泄漏

(內(nèi)存泄漏:內(nèi)存占用(比如:手握沙子,握得越緊手里剩得就越少))


閉包觸發(fā)的情況:

    兩個或多個函數(shù)互相嵌套,把里面的函數(shù)保存到外部,這樣的情況一定會產(chǎn)生閉包。從外面還可以調(diào)用里面的函數(shù)。


閉包的作用:

            實現(xiàn)公有變量

                    eg:函數(shù)累加器

            可以做緩存(存儲結(jié)構(gòu))

                    eg:eater

               可以實現(xiàn)封裝,屬性私有化

                    eg:person()

                模塊化開發(fā),防止污染全局變量



[html] view plain copy
  1. // 函數(shù)累加器  
  2. function add(){  
  3.     var count = 0;  
  4.     function demo(){  
  5.         count ++;  
  6.         console.log(count);  
  7.     }  
  8.     return demo;  
  9. }  
  10. var counter = add();  
  11. counter();  
  12. counter();  
  13. counter();  
  14. counter();  
  15. counter();  
  16. counter();  
  17.   
  18.   
  19. // eater  
  20. function test(){  
  21.     var food = "apple";  
  22.     var obj = {  
  23.         eatFood : function (){  
  24.             if(food != ""){  
  25.                 console.log("I am eating  " + food);  
  26.                 food = "";  
  27.             }  
  28.             else{  
  29.                 console.log("There is nothing!");  
  30.             }  
  31.         },  
  32.         pushFood : function (myFood){  
  33.             food = myFood;  
  34.         }  
  35.     }  
  36.     return obj;  
  37. }  
  38. var person = test();  
  39. person.eatFood();  
  40. person.eatFood();  
  41. person.pushFood('banana');  
  42. person.eatFood();  

附加一個逗號操作符:

        先看前面的表達式,再看后面的表達式,把后面表達式的計算結(jié)構(gòu)返回

例題:

[html] view plain copy
  1. var f =(  
  2.     function f(){  
  3.         return "1";  
  4.     },  
  5.     function g(){  
  6.         return 2;  
  7.     }  
  8. )();  
  9. console.log(typeof(f));   
  10.   
  11. // -------number  
  12.   
  13. var x = 1;  
  14. if(function f(){}){  
  15.     x += typeof f;  
  16. }  
  17. console.log(x);  
  18. // --------> 1undefined  
  19. 藍藍設(shè)計sillybuy.com )是一家專注而深入的界面設(shè)計公司,為期望卓越的國內(nèi)外企業(yè)提供卓越的UI界面設(shè)計、BS界面設(shè)計 、 cs界面設(shè)計 、 ipad界面設(shè)計 、 包裝設(shè)計 、 圖標定制 、 用戶體驗 、交互設(shè)計、 網(wǎng)站建設(shè) 、平面設(shè)計服務(wù)

UI設(shè)計的四個方向

藍藍設(shè)計的小編

這篇文章里總結(jié)了下UI的四個方向,我覺得很對,所以想再分享下自己的一點經(jīng)驗。都說今年UI工作不好找,從面試都能看出了,確實是啊。

HTML條件注釋用法詮釋

seo達人

如果您想訂閱本博客內(nèi)容,每天自動發(fā)到您的郵箱中, 請點這里

HTML條件注釋用法詮釋

注釋內(nèi)容以樣式為例,如下:

1、支持所有IE瀏覽器

<!--[if IE]>
<link rel="stylesheet" href="all-ie-only.css" type="text/css"/>
<![endif]-->
    
  • 1
  • 2
  • 3

2、支持非IE瀏覽器

<!--[if !IE]>
<link rel="stylesheet" href="not-ie.css" type="text/css"/>
<![endif]-->
    
  • 1
  • 2
  • 3

上面是除了IE瀏覽器外所有瀏覽器都識別這個樣式,另外CSS-TRICKS《How To Create an IE-Only Stylesheet》一文中提供了另一種寫法:

<!--[if !IE]><!--> <link rel="stylesheet" type="text/css" href="not-ie.css" /> <!--<![endif]-->
    
  • 1
  • 2
  • 3

3、僅僅支持IE10

<!--[if IE 10]>
<link rel="stylesheet" type="text/css" href="ie10.css">
<![endif]-->
    
  • 1
  • 2
  • 3

4、支持IE10以下版本(IE9以及IE9以下版本)

這種方法是樣式表使用在低于IE10的瀏覽器,換句話說除了IE10以外的所有IE版本都將被支持。

<!--[if lt IE 10]>
<link rel="stylesheet" type="text/css" href="ie9-and-down.css">
<![endif]-->
    
  • 1
  • 2
  • 3

也可以寫成

<!--[if lte IE 9]>
<link rel="stylesheet" type="text/css" href="ie9-and-down.css">
<![endif]-->
    
  • 1
  • 2
  • 3

前面我們也說過了lt和lte的區(qū)別,lt表示小于版本號,不包括條件版本號本身;而lte是小于或等于版本號,包括了版本號自身。

上面這幾種方法,使用的是低于(lt)和低于或等于(lte)的方法來判斷,我們也可以使用大于gt和大于或等于gte達到上面的效果:

5、高于IE9的版本(IE10以及IE10以上版本)

<!--[if gt IE 9]>
<link rel="stylesheet" type="text/css" href="ie10-and-up.css">
<![endif]-->
    
  • 1
  • 2
  • 3

<!--[if gte IE 10]>
<link rel="stylesheet" type="text/css" href="ie10-and-up.css">
<![endif]-->
    
  • 1
  • 2
  • 3

6、指定多種IE版本

<!--[if (IE 6)|(IE 7)|(IE 8)]>
<link rel="stylesheet" type="text/css" href="ie6-7-8.css">
<![endif]-->
    
  • 1
  • 2
  • 3

參考: 
https://www.cnblogs.com/hushufang/p/3708704.html

藍藍設(shè)計sillybuy.com )是一家專注而深入的界面設(shè)計公司,為期望卓越的國內(nèi)外企業(yè)提供卓越的UI界面設(shè)計、BS界面設(shè)計 、 cs界面設(shè)計 、 ipad界面設(shè)計 、 包裝設(shè)計 、 圖標定制 、 用戶體驗 、交互設(shè)計、 網(wǎng)站建設(shè) 、平面設(shè)計服務(wù)

日歷

鏈接

個人資料

藍藍設(shè)計的小編 http://sillybuy.com

存檔