008

(1 / 1)
🔥
每日更新海量小說,總有一本讓你上頭
收藏域名 nbn.tw · 追更不迷路
nbn.tw

基礎考核

一眨眼,大半年的時間已經過去。這段時間裡,葉小凡已經把《Javascript基礎修煉要訣》看了無數遍,結合自身的修煉,隱隱有突破的跡象。在腳本大陸,武者修行分為幾個境界,分別為幼兒園、小學、初中,在初中之上,更有神秘的高中級別存在。如果能修煉到高中的境界,在腳本大陸最起碼是宗門的大長老!千鶴派的大長老就是高中境界。而葉小凡此時才隻是幼兒園境界罷了。至於高中境界之上,傳言還有更高的境界,至於是什麼,葉小凡並不知曉,同齡的修土也不知曉。那層境界太過高深和玄妙,自然無人詳談。但是聽說千鶴派的高層,流傳著在千鶴派的內門有幾位修為極其恐怖的老怪潛藏著的傳言,其修為之恐怖駭人聽聞,功法境界達到了傳說中的大學僧!

大學僧是傳說中才有的存在。葉小凡也是在無意中聽到了這些傳聞,但他自知這些對當前的自已來說畢竟太過遙遠,好好修煉、爭取在基礎考核中獲取不錯的名次才是正道。

不多時,基礎考核的日子如期而至,基礎考核隻有黃衣弟子才能參加。這一日,考核大殿上擠滿了前來參加考核的弟子。在某些弟子看來,這一日若是能進入前五名,則不僅能獲得宗門的賞賜,更能獲得一筆不菲的貢獻點。

貢獻點可以在宗門山下的坊市內換取修行所需的資源,比如草稿紙、u盤等。

這天一大早,葉小凡吐納完畢,早早地來到了考核的會場——基礎閣,這裡是每個月對身在青山院的修土進行考試的地方。但見朱漆大門頂端懸著黑色金絲楠木的匾額,上麵龍飛鳳舞地題著“基礎閣”三個大字,葉小凡定睛看去,門前還貼著一張寬幅白紙,上麵赫然印著“光榮榜”三個字,往下就是一張規整的表格,上麵羅列了曆代驕子的成績。

“聽說了嗎,隻有基礎考核進入前20名才有資格在成績單上顯示自已的名字!”

此刻基礎閣門前的弟子慢慢多了起來,大部分人都是和葉小凡一樣的黃衣弟子。

“快看,趙牛師兄的成績依然排在光榮榜第一位!”不知道是誰突然喊了一聲,人群立刻躁動起來。

“可是那進入宗門一個月就破例升級為紅衣弟子的趙牛?”

“除了他還有誰?據說資質測驗的時候,咱們青山院的掌尊就說這人資質絕佳,是百年難得一見的修煉天才。第一次參加黃衣級別的基礎考核就輕鬆拿下第一,而且記錄至今未被打破。現在升級到紅衣弟子,趙牛師兄依然在同輩修土中遙遙領先。”

葉小凡聽聞關於趙牛的傳聞,心想自已什麼時候才能像趙牛師兄那般優秀呢?

“哈哈哈,什麼趙牛不趙牛的,早晚會被我林濤踩在腳底。我才是這一屆的新人之星!”

就在這時,一陣自信且帶有一些豪放的聲音傳來,葉小凡尋聲望去,隻見一個身材高挑、眉清目秀的黃衣男子大步流星地走了過來。

2.2 林濤

“這人是誰?”葉小凡小聲地問周圍的人。

“你是新來的吧,你都不知道他?林濤師兄啊,雖然資質比不上那天之驕子趙牛,但卻被譽為我們這一屆最有可能追上趙牛的人。”旁邊的少年一臉感慨地說道。

此人的大聲不但絲毫沒有引起眾人的反感,反而在人群中引來了一陣歡呼。

“原來是林濤師兄啊,憑借師兄你的實力,這一次一定可以趕超趙牛,成為榜首的!”

“天哪,那是林濤師兄,雖然是黃衣弟子,但是據說實力已經達到了幼兒園大班的巔峰!而且即便是遇到小學一年級的對手也可一戰!”

“是啊,是啊,之前就有一個不長眼的小學一年級境界的修土,好像還不是我們青山院的,要來和我們林濤師兄比試Javascript基礎,結果最後還不是隻能打成平手!”

“林濤師兄可是我們青山院的天之驕子,10以內的加、減法根本難不住他,據說100以內的加、減法他也參悟了一些!”

聽著周圍同修的歡呼和羨慕,林濤心裡一陣欣喜,心想要不是一直想要獲取黃衣級別的考核第一,讓自已的名字排在那該死的趙牛前麵,自已早就成為紅衣弟子了。隻是要知道,一旦成了紅衣弟子,就無法繼續參加黃衣級別的基礎考核了。而偏偏林濤的好勝心又極強,所以他才沒有選擇升級為紅衣弟子。

在青山院,升級為紅衣弟子的方式有兩種:第一種是自身實力達到幼兒園大班水平,就可以向掌尊林元青申請紅衣弟子的身份;另一種是參加每月舉辦一次的基礎考核,如果能獲取榜首,也可以直接升級為紅衣弟子。

但是幾年前,青山院出了一個天才趙牛,自從獲取基礎考核榜首的排名以後,再也沒有人超過他的成績。即便是林濤,幾次基礎考核下來,也一直穩定在第二名的位置。

一想到趙牛的名字,林濤心裡的傲氣就難以平複下來,他攥緊了拳頭,咬牙切齒道:“哼,趙牛,這一次我一定可以超越你,獲取榜首的名次!”

沒多久,基礎考核正式開始,人們陸續走進考場,每個修土都被安排到一個座位上,葉小凡被安排在一個靠窗的位置,旁邊的人正是那位自信的林濤。隻見林濤此刻一臉的自信,睥睨地一掃眾人,露出不屑的微笑,在他看來,此次基礎考核,榜首非他莫屬。

突然,一道飛虹閃過,一襲白衣的林元青出現在了眾考生的麵前。考生們見此都麵露尊敬之色,即便是那不可一世的林濤,也和眾人一樣,當下離開自已的座位,向著林元青恭恭敬敬地行禮。

“參見掌尊!”

林元青“嗯”了一聲,目光落在林濤身上,正好與林濤的目光對上,便微微點了下頭。這一幕被同修看到,內心震撼無比,天哪!那可是掌尊啊!掌尊大人能夠對林濤點頭示意,這代表就連掌尊也非常看好林濤。

但是這一切並沒有對葉小凡造成什麼影響。此刻的葉小凡,還在仔細地回顧《Javascript基礎修煉要訣》的方方麵麵,查漏補缺。

看到葉小凡的平靜,林元青頗感欣慰,此子的努力他都看在眼裡,暗道我輩修土就應該這樣波瀾不驚,不要被外界的一些名利所迷惑,唯有這樣,方可修成正果!雖然此次考核林元青不認為葉小凡可以戰勝林濤,但依然希望葉小凡能夠取得好成績。

至於林濤,林元青苦笑了一下,此子早就進入了幼兒園大班的境界,更是修煉到了巔峰,可以說是半隻腳已經踏進了小學一年級的大門。可偏偏為了和那天才趙牛搶奪考核榜首的位置,始終不肯來自已這裡申請紅衣弟子的身份。

“哼,此子若是一直超不過趙牛,豈不是一直不肯晉升為紅衣弟子?這次考核過後,不管結果如何,我都要讓這林濤成為紅衣弟子。我輩修土,怎能被名利衝昏了頭腦!”林元青暗自思忖,等本次考核結束後,說什麼也要讓林濤成為紅衣弟子。

2.3 變量和簡單數據類型

林元青看了眾人一眼,下發考題,淡淡地說道:“本次考核共有三題,第一題作答合格後我才會給下一題。”

隨著第一題的發放,眾人一看,原來是考查對Javascript數據類型的理解,這本身不是很難,但是對於一些不常見的類型,卻也不是那麼好作答的。於是,眾人也不說話,紛紛開始了緊張的答題。

林元青給出的考卷如下。

這是一個htmL模板,就算是幼兒園小班境界的修土,也知道Javascript代碼是需要寫在標簽塊裡麵才會生效的。

葉小凡沒有急著答題,而是在仔細回顧自已所掌握的功法,越是這種基礎的知識,反而越是需要認真作答,以免有所遺漏。

在Javascript功法中,數據類型是非常基礎但又萬分重要的一環,對數據類型的了解程度將直接影響今後的修煉。

“首先是簡單數據類型,分為字符串、數值型、布爾型、null和undefined。”葉小凡心中了然,對於簡單數據類型,他實在是太熟悉了,他知道對於這些類型,比如字符串“hello world”,就是一個字麵值。有了就是有了,如果沒有用一個變量裝起來,就隻是曇花一現,無法長久保存。變量需要用關鍵字var定義,它的作用就是保存這些值。字符串就是一些文本,僅此而已。通過操作符“+”可以對字符串進行連接。

想到這裡,葉小凡一揮手,打出這樣一串代碼。

var str01 = "我的名字是:";

var str02 = "葉小凡";

alert(str01 +str02);

alert是彈窗函數,屬於最基礎的方法之一。運行之後,一個彈窗頓時顯示在葉小凡眼前,如圖2-1所示。

圖2-1 運行結果

這便是字符串連接的方法了,葉小凡目光一閃,繼續作答。第二個是數值型,數字分為整數和小數,可是不管是哪個,都可以用變量裝起來。然後是布爾型,這個比較特殊,隻有兩種狀態,分別為true和false,一個代表真,一個代表假。這些都是基礎知識。突然,葉小凡有一個想法,字符串和數值型如果與布爾型變量聯係起來,那麼哪些是真,哪些又是假呢?葉小凡陷入了沉思。

就在這時,一個響亮的聲音傳了出來。

“稟告掌尊,我已經完成了第一題。”眾人抬頭望去,正是那林濤!

林元青接過林濤的答卷,目光一掃。

林元青的目光中閃過一絲微不可查的讚賞,“嗯”了一聲,就給林濤發了第二題。就這樣,在眾人“羨慕嫉妒恨”的目光中,林濤美滋滋地重新回到座位,開始解答第二題。這一切,葉小凡都充耳不聞,因為他的內心已經充滿了好奇,終於,他目光一閃,開始了實驗。

“我用if語句做判斷,看看到底怎麼回事。”說著,葉小凡快速地打出一段代碼。

運行後,一個大大的“真”在彈窗中顯現。

“嗯,不為空的字符串自然是真,這個不奇怪。那麼,如果是空的字符串呢?”

“咦,是假的,因為字符串是空的,這也可以理解。”

那如果是數字呢,數值型大概分為正數、負數和0,這三種情況又有什麼區別呢?想到這裡,葉小凡又開始了實驗。

結果如圖2-2、圖2-3、圖2-4所示。“嗯,0代表沒有,所以是假的,另外兩種情況則是真的。”葉小凡認真地做著記錄,此刻的他,似乎忘記了自已是在考核,心中隻是對自已的疑問充滿了興趣,像是在研究一個有趣的現象一般。

“字符串隻要不為空,就代表真,否則代表假。數字隻要不為0,就代表真,否則就是假。那麼既然如此,字符串形式的0代表真還是假呢?”想到這裡,葉小凡有點興奮,兩眼精光閃爍,迫不及待地開始了實驗。

圖2-2 結果(1)լ

圖2-3 結果(2)

圖2-4 結果(3)

結果是“真”。葉小凡“嗯”了一聲,這個結果並沒有出乎他的意料。但是通過這一次實驗,葉小凡對於數字、布爾值、字符串又有了新的明悟。最後是null和undefined,這兩個簡單數據類型都代表了空值,但是null更多的是主動地將某個變量設置為空值,而undefined更多的是因為一些意外狀況而出現的,比如一個變量已經定義了,卻忘記給它賦值,於是它的值就是undefined。葉小凡一絲不苟地將自已對於null和undefined的理解也寫了上去。至於真和假的判斷,null和undefined都是空值,自然代表了假。這一點,葉小凡自然了解。就在這時,又是一聲響亮的聲音在考場內響起。

“掌尊,我已經完成了第二題!”

2.4 精度問題

不是林濤還能是誰?眾人震驚,沒想到在這麼短的時間內林濤就已經完成了第二題!可是,林濤此刻的表情卻沒有了之前的傲然,而是多了一層疑惑。因為在他看來,這第二題太簡單了。

“不就是簡單的四則計算嗎?這第二題實在是有點簡單!10以內的加減法如何能難得住我!就是有點奇怪,這第二題為何如此簡單?”滿腹疑惑的林濤如願拿到了第三道考題。

林元青看向林濤的試卷,目中劃過一絲失望,心中暗想:“此子心高氣傲,太過粗心,還需好好調教才是。”

接著,陸陸續續有人提交第一道考題,換取第二道考題。林元青一份份檢查,大部分人都隻寫出字符串、數值型和布爾型,忽略了null和undefined,林元青輕輕歎了口氣,把目光投向葉小凡。這時候的葉小凡再三檢查無誤後,終於提交了答卷。林元青微微點頭,給了葉小凡第二題,然後隨意地看了一眼葉小凡的答卷。

“此子基本功紮實,不錯。”林元青看完葉小凡的答案後,頗感欣慰,抬眼看去,發現葉小凡已經開始認真地審查第二題,林元青的目光中閃過一絲期待,暗道:“不知這第二題,此子是否還能繼續讓我感到意外?”

葉小凡看著第二題,此刻也是心中淩亂,不是說這第二題有多難,而是不管是誰第一眼看到這第二題,都會覺得這也太簡單了吧!

第二題。

此刻拿到第二題的眾人也是心裡陰晴不定,有疑惑的,也有暗自慶幸的。

“還好還好,這第二題隻是考查最簡單的四則運算,這一題我有絕對的把握。難怪那天之驕子林濤這麼快就完成了此題。我也可以,哈哈。說不定本次考核我也可以拿到一個好的名次!”很多人都這麼想。

葉小凡眉頭一皺,心想這其中肯定有問題,不可能這麼簡單。不一會兒,就有很多人提交了第二題,成功拿到了第三題。那些提交上去的考卷,代碼如出一轍地相似。

這些都被林濤看在眼裡,心中不由冷笑:“哼哼,這道題其實每一個人都可以做出來,但是掌尊肯定在考查其他知識。我如今已有了幼兒園大班的巔峰實力,對於函數的使用也有了幾分把握。這道題,我單獨寫了一個函數,然後把兩個數值作為參數傳遞進去。如此一來,絕對能夠入師尊的法眼!哈哈,你們這群菜鳥如何能跟我相比?”

林濤一想起自已的代碼,心中的自信更濃。

林元青看著眾人的代碼,心中的失望也更濃,他又翻了翻林濤的代碼。

林元青心中歎道:“此子雖然沒有領悟到我出這題的真正用意,可是最起碼掌握了函數的用法,雖有瑕疵,但是也算不錯了。”

葉小凡看著題目,心中疑惑更重。

“實在是奇怪,我先來看一看結果吧。”於是,葉小凡順手打出一段代碼。

var num01 = 0.1;

var num02 = 0.2;

alert(num01 +num02);

結果如圖2-5所示。“什麼,0.1加0.2不是應該等於0.3嗎?怎麼會這樣?”葉小凡瞪大了眼睛,露出難以置信的神色。

圖2-5 運行結果

這一幕被林元青看在眼裡,眼睛一眯。

“看來此子已經發現問題了,好,就讓我看看你準備如何解決這精度丟失的問題。”

2.5 化浮為整

葉小凡仍在鑽研這道精度丟失的問題,忽然,他的眼中似乎閃過一絲明悟,暗自說道:

“等等,也許是我想得太複雜了,小數的計算雖然會丟失精度,可是之前對於整數的計算卻沒有這個問題。既然如此,我為何不把這兩個小數換算為整數進行計算,大不了到時候再除以一個共同的倍數便是了!”

葉小凡越想越有道理,立刻按起手印,打出一串代碼。

結果如圖2-6所示,“成功了!”

葉小凡十分欣喜,手上結印的速度更快了,將一個除法運算飛快地打出。

alert( (num01 +num02) / 10 );

結果如圖2-7所示,葉小凡盯著自已的成果,欣喜之餘又似乎覺得不夠完美,比如,10這個倍數如果每次都以一種字麵量的形式出現,未免太過單調,萬一場景變化了怎麼辦?比如,現在是0.2加0.1,如果換成了0.2和0.01相加,那麼這個10便不再適用。

圖2-6 運行結果

圖2-7 運行結果

“這個10不是確定的,應該根據兩個相加的具體數值動態獲取。比如,0.1就是10,0.01就是100。”葉小凡喃喃自語道。l

“那麼如果動態獲取呢?首先,0.1和0.01相比有什麼相同之處?嗯,它們都是數字,這個太顯而易見了。那麼有什麼不同之處呢?它們的位數不一樣,0.01比0.1多了一個0。很好,最後一個問題,如何獲取它們的位數呢?”葉小凡用法術顯化出這兩個字麵量,忽然,他腦子中劃過一個閃念,豁然開朗。

“對了,我更應該關心的是數字小數點後麵的位數,小數點?對了,就是小數點!比如0.01是一個小數,也就是浮點數。如果要對其化浮為整,就要乘以100,這個100怎麼來的呢?不就是因為0.01的小數點後麵有2位,所以就是100嘛!”

“很好,現在的問題就已經轉換成如果獲取小數點後麵的位數了!我知道如何獲取一個數字的位數,隻需要把數字當成字符串處理即可,因為字符串有一個length屬性可以告訴我它的位數。”

說著,葉小凡目光炯炯,開始操練起來。

var num01 = "0.01";

alert(num01.length);

結果是4,代表0.01這個字符串有4位。那麼,如何獲取小數點後麵的位數呢?葉小凡腦袋中飛快地回憶《Javascript基礎修煉要訣》中關於字符串的相關功法。

“有了,字符串有一個split函數,可以把一個字符串通過某種規則和標記符號進行分隔,並返回一個數組。比如0.01,如果通過點號分隔,就會返回一個字符串數組,整個字符串數組裡麵應該會有2個字符串,一個是‘0’,另一個是‘01’!”

var num01 = "0.01";

var num01_arr = num01.split(".");

“果不其然,經過點號分割後,0.01就被拆開了,變成了一個字符串數組[0,01],而我想要獲得的是後麵的01,因為數組下標是從0開始的,所以需要這樣獲取。”

var num01 = "0.01";

var num01_arr = num01.split(".");ᒑ

var num01_arr_2 = num01_arr[1];

alert(num01_arr_2.length);

結果如圖2-8所示。“成了!”葉小凡微微一笑。經過努力,葉小凡終於獲取到了0.01這個數小數點後麵的位數,2位就對應倍數100。如果現在要計算0.1加0.02,隻需要先把這兩個數中比較小的那個數字通過上麵的方法求出倍數,然後將這兩個數字都乘以這個倍數,就可以化浮為整了。因為整數的計算沒有精度丟失的問題,所以可以放心大膽地進行計算,計算完成後,再將結果除以倍數就得到正確答案了!

圖2-8 運行結果

2.6 函數的三大要義

“現在,化浮為整的方案我已經基本得出,接下來就要進行函數封裝了。所謂函數,也是我最近幾日才學習到的功法。就好像之前我研究的化浮為整,雖然能夠實現功能,但是距離完美還遠遠不夠。計算的數字千差萬別,我不可能每次都手動地化浮為整,那樣對我的法力消耗過大。但是如果我可以把這個過程封裝為函數,效果就大大不同了。”

葉小凡調整了一下呼吸,重新盤膝坐好,想起了《Javascript基礎修煉要訣》中關於函數的說明:函數之修,第一要義便是理解返回值、參數列表和函數體。可以把函數想象成一個“黑盒子”,所謂參數,就是丟到這個黑盒子中的物體,可以是單個物體,也可以是多個物體。黑盒子的內部空間就是函數的函數體!在函數體中,可以對丟進來的參數進行處理,處理結束後,如果該函數的設計者認為需要將得到的某個結果從黑盒子中扔出,作為對於“黑盒子訪問者”的獎賞,就可以使用return關鍵字將其拋出。

函數之修,第二要義便是業務邏輯,作為函數的設計者,必須清楚地明白自已設計這個函數是為了什麼。葉小凡眼中一亮,想到了剛才化浮為整的過程,因為0.1和0.2都是小數,所以直接相加會產生精度丟失的問題,如圖2-9所示。

為了解決這個問題,就要先把0.1和0.2都換算成整數進行計算,最後再除以一個倍數10。對於這種小數的計算,不妨設計一個通用的函數,將需要相加的參數傳遞進去,將化浮為整的邏輯就寫在函數體中,最後將結果返回出去,豈不快哉?

圖2-9 運行結果

函數需要用function關鍵字定義,葉小凡思索片刻,心中了然,於是打出一段代碼。

函數並沒有寫完,但是葉小凡不著急,因為他明白,在編寫函數的時候,一定不能著急。在有了一個大概的目標和方向後,為了保險,應該寫一點,測試一點。不求一口吃成個大胖子,隻求已經寫上去的代碼都是經得起推敲和認證的。比如有一個修煉者,自恃武藝高強,一口氣打出100行代碼流,然而在第5行代碼中出現了一個嚴重的錯誤,那麼剩下的95行代碼就是沒有意義的。不僅如此,這個人很可能還會受到運功失敗帶來的強烈反噬!葉小凡深知這個道理,所以此時他不急著把剩下的代碼敲完,而是先試著能不能正確獲取傳入的兩個參數各自小數點後麵的位數。在代碼中,葉小凡用變量a和b存儲獲取的小數位數,然後用console對象的log方法打印出來。(讀者隻需要知道console.log函數可以將某個變量打印出來,在瀏覽器中,可以按下f12鍵找到console控製台,查看打印出來的數據,在此不做過多講解。)

函數之修,第三要義便是函數的調用。要調用一個函數,隻需要在函數的名稱右邊打一對小括號就行了。如果函數有一個參數,就在小括號中填入一個具體的數據,比如一個變量或者直接量。如果函數有多個參數,就在圓括號中填入多個具體數據,用逗號分隔。就比如下麵這樣。

var num1 = 10;

var num2 = 20;

add(num1,num2);

2.7 add函數完成

葉小凡一邊思索,一邊繼續編寫代碼。很好,現在已經可以獲取傳入的兩個參數的小數點後麵的位數了,接下來需要比較一下這兩個位數誰大誰小。比如傳進來的兩個數據為0.2和0.02,那麼經過以下代碼計算:

//獲取兩個數字的小數點後麵的位數

var a = num1.split(".")[1].length;

var b = num2.split(".")[1].length;

結果就是a=1,b=2,那麼需要把0.2和0.02同時乘100,變成20和2,100就是2個10相乘的結果,2就是a和b之間較大的那個數。接下來計算20+2=22,最後除以100,得0.22。思路漸漸清晰,葉小凡從容不迫地打出以下代碼。

這樣一來,max就是那個較大的位數,假如max為2,那麼就需要把2變成100,也就是10×10。同理,如果max為1,那就是10了。具體邏輯如下所示。

max = 1---> 10

max = 2---> 10 × 10

max = 3---> 10 × 10 × 10

max = 4---> 10 × 10 × 10 × 10

max = 5---> 10 × 10 × 10 × 10 × 10

max = 6---> 10 × 10 × 10 × 10 × 10 × 10

如何實現這個邏輯呢?葉小凡思索了一下,決定用for循環完成,於是他右手一揮,一段代碼流便憑空出現。

假如傳入的數字是0.2和0.02,那麼max就是2,for循環會進去兩次,每次都將倍數擴大10倍,獲得的結果就是100。下一步就是把兩個小數同時乘這個倍數。

//兩個小數同時乘得到的這個倍數

num1 = num1 * beishu;

num2 = num2 * beishu;

最後,相加以後再除以倍數,把結果返回出去。

//相加完畢後,再將結果除以倍數

var sum = (num1 +num2) / beishu;

return sum;

葉小凡長出了一口氣,額頭已經微微冒汗,心裡想:“終於把函數完成了,接下來就是測試。”

“嗯,是時候表演真正的技術了!”

隻見葉小凡結起手印,開始調用函數!

alert( add( 0.1, 0.2));

結果如圖2-10所示,一束藍色光暈閃過,0.3的結果以彈窗的形式飛出。

圖2-10 運行結果

“成功了!”葉小凡十分欣喜。就在這個時候,他突然想到了另外一個問題。

“還有一個問題,這個函數現在雖然可以正確地計算0.1+0.2,但不知道它能否正確計算1+0.2?”也就是說,如果傳入的參數不是小數而是整數,又會怎樣?於是,葉小凡又開始測試。

“試試吧,說不定也可以呢!”

說著,葉小凡打出一段測試代碼。

alert( add( 1, 0.2));

函數調用,發動!

這一次,一道紅光一閃而過,葉小凡調用函數失敗,當即受到反噬。

“糟糕,怎麼會這樣!”

2.8 函數調試

本節以360極速瀏覽器為例,借由主人公葉小凡的“內功心法”講解Javascript代碼的調試步驟。基本步驟如下,打開瀏覽器後,按f12鍵進入開發者模式。調試界麵如圖2-11所示。

圖2-11 調試界麵(1)

所謂程序斷點,就是程序被中斷的地方。比如,你在某一行代碼上打了一個斷點,當程序運行到這一行代碼的時候就會停留。程序開發者可以在斷點處對代碼進行調試,使代碼一行一行地走下去,看看什麼地方出現了問題。

調試界麵如圖2-12所示。

圖2-12 調試界麵(2)

當程序運行後,就會在第8行中斷。如果想要進行到下一步,就單擊圖2-13所示的框內按鈕即可。

圖2-13 將程序進行到下一步

在這個調試麵板上,最左邊的按鈕是全速運行。如果單擊這個按鈕,就會迅速地執行當前斷點下麵的所有代碼。如果該斷點下麵沒有其他斷點,就會將剩下的程序全部執行完畢。如果下麵還有其他斷點,則會立刻跳轉到下一個斷點所在的行。還有一種情況,萬一其中的某一行代碼出錯,就會在控製台給出一個紅色的錯誤信息,然後強製結束程序調試。

葉小凡調用add函數,傳入參數1和0.2,結果函數報錯,錯誤信息如下。

圖2-14 錯誤提示

。行21第了在出誤錯,示所41-2圖如

;htgnel.]1[)"."(tilps.1mun = a rav

。數函dda用調新重後然,點斷個一出打行21第在他,先首。試調行進碼代對功運即當凡小葉,了錯出序程

”!用調數函我看,嗬“

;))2.0 ,1 (dda (trela

。況情行執的碼代到察觀細仔以可念心的凡小葉次這以所,點斷了打為因

)3(麵界試調 51-2圖

。行21第了在留停碼代在現。”2.0“和”1“的型類串符字了成變,後法方gnirtsot過經自各們它,2.0是則2mun,1數參個一第的入傳候時的用調數函是就1mun現發,碼代跟緊念心的凡小葉,示所51-2圖如麵界試調

”!走。行31第到走我讓在現,誤錯有沒看來前目,好很“

。前眼的凡小葉了在現出又誤錯個那前之,過閃光紅束一是又,時這在就

位定誤錯 61-2圖

息信誤錯 71-2圖

。度長的串符字個一了表代性屬htgnel。4是就性屬htgnel的它,”dcba“串符字,如比再。3是就性屬htgnel的它,”100“串符字,如比。的錯有沒是個這,性屬htgnel個一有都,串符字是凡但,先首。因原考思始開來下靜冷凡小葉”?嗎性屬htgnel個一有都串符字說是不,到不取性屬htgnel,樣這會麼怎“。示所71-2圖和61-2圖如息信誤錯和位定誤錯

”?串符字是不就根壓]1[)"."(tilps.1mun明說是不豈麼那,性屬htgnel有沒然既!等等“。示所81-2圖如果結

果結行運 81-2圖

。割分行進”.“以”1“把後然,”1“串符字的到得法方gnirtsot過經1字數的去進傳我是就1mun。害要的題問了住抓經已已自覺感,光精出露眼兩凡小葉

。了中之理情在然自也錯報,的行可不是然自據數取獲方地的]1[去行強,此因,據數有才裡置位的0為標下有隻,說話句換,素元個一有隻組數的到得)"."(tilps.1mun是可。據數取獲置位個2第的組數從表代]1[以所,的始開0從是標下的組數為因又。]”1“[:組數的據數個單有隻個一到得會隻麼那,隔分”.“據根”1“串符字給,說是就也。號點有沒就來本,1為值的1mun候時個這。隔分行進”.“據根1mun量變將是思意的碼代句這]1[)"."(tilps.1mun。此如來原,了白明我,啊“

法方foxedni 9.2

。案方決解索思始開凡小葉

”!0是數位數小認默就則否,行進法方的先原照按就,數小是果如,下一斷判前之數位數小取獲在妨不我,了有?呢辦麼怎該麼那,的大很是還性能可的數整是字數的入傳,然不實其。數小是定一字數的入傳為認地然當想,候時的碼代寫編在我為因是,題問個這現出會以所之“

程流序程 91-2圖

”。場用上派以可定不說,法方foxedni個一有象對串符字得記我,點數小有否是斷判何如是就題問的來下接“。示所91-2圖如程流序程

。法方foxedni用調後然,串符字個一義定在現,如比。法方foxedni有會就,串符字是要隻,先首。則法用使的法方foxedni憶回緩緩始開凡小葉,憶記的已自據根

果結行運 02-2圖

。了得握掌能才土修的力實峰巔園兒幼的般這濤林如比,子驕之天些那是往往。了的握掌和覦覬能所者學初個一是不經已也,些這是便即。號括個一打要需用調的數函,數函是就法方,道知要。得難是已步地此如到握掌,言而子弟的數多大絕於對能可。了已而此僅就也上籍秘法功本這》訣要煉修礎基tpircsavaJ《在,載記的foxedni於關,想暗凡小葉。2是不而,1是果結的回返,”2“索搜中”654321“從法方foxedni用,此因。的始開0從是也標下的串符字,樣一組數和。回返置位的中串符字原在串符字個這把就,”2“在存果如,”2“索搜中”654321“從如比,串符字的定特個一索搜中串符字原在是思意的foxedni。示所02-2圖如果結

?呢樣麼怎會又那,在存不中串符字在項配匹的詢查要需個這而,項配匹個某詢查法方foxedni用調串符字個一果如,想在就前之凡小葉。麼什為個幾問多歡喜都事凡,人的奇好滿充個一是凡小葉。界境的峰巔園兒幼了到達經已解理的數函對已自,到想有沒都已自凡小葉連能可

。行執刻立並碼代下以出打,動行刻立凡小葉,畢完考思

果結行運 12-2圖

”。數小是數個這明說就那,點數小有。點數小有明說就,1-為不值回返要隻。值回返個一到得,’.‘詢查法方個這用,了以可就法方foxedni用要需隻,數小是否是字數個一斷判,了辦好就這!啊1-是就果結的到得,項配匹的在存不個一詢查,此如來原“。示所12-2圖如果結

。碼代段一了出打,功運始開又後刻片默沉,展舒始開頭眉,意主定篤凡小葉。事回麼這是就

。試測手著便後題問有沒認確,對比行進路思的始開最已自和,碼代著察觀凡小葉

”!吧加相數小的數位同相下一試先首“

:數函行執。數函dda入傳下功運的他在,中掌手在現出間瞬數小個兩,印手起結凡小葉,落剛音話

;)20.2 ,10.1 (dda

。的同不數位次一來再,笑一淡淡凡小葉,了功成。示所22-2圖如果結

;)200.2 ,10.1 (dda

:數函行執,功運次一再凡小葉?呢位3是都數位的數小個兩果如,吧個一後最試測來再,好很,題問有沒也。示所32-2圖如果結

果結行運 22-2圖

果結行運 32-2圖

;)200.2 ,100.1 (dda

!噬反到遭,敗失數函行執凡小葉”!噗“。示所42-2圖如果結

果結行運 42-2圖

法方ecalper 01.2

”?啊利順很都明明才剛,樣這會麼怎“

。碼代行一出打手隨凡小葉。題問有就身本0001以乘100.1,說是就也,0001是都數倍的大放,中例案試測個這在。題問點有是還算計確精的數小於對tpircsavaJ來看,位3是都麵後點數小的200.2和100.1?呢敗失了遇遭候時的試測次一後最在麼什為。確準很都果結算計個兩前且而,題問有沒說理按路思個這,思沉入陷禁不凡小葉

;)0001 * 100.1(trela

果結行運 52-2圖

。零補麵後字數的小較在接直以可就分部的來出多以所,位幾多的小較比數位數小的數小的大較為因。掉去點數小把,理處的同相做是也數位的大較對,掉去點數小的中字數個那的小較把先脆乾就麼那,通不行能可有法乘然既,說來單簡。換替用利是而,法乘作不是就那,案方的新了有凡小葉,快很。了路思種一換不得不已自來看,慨感凡小葉!啊題問的失丟度精有會然依算計的法除乘數小,法減加是僅不來看,了題問出然果。示所52-2圖如果結

。0022成變,零個2上補麵後22在要需還後最以所,位2了多2.2比數位數小的100.1,性致一的數位證保了為,1001了成變就100.1麼那,掉去也點數小的100.1把後然;22了成變就2.2,掉去點數小的中2.2把先,2.2和100.1為別分,數小個2有在現,如比

:令指入輸,法方ecalper有擁以可就身本串符字用調要需隻麼那,”dcba“串符字成變,c的寫大成換替c的麵裡把要果如,”dcba“串符字個一有在現說如比。呢了大可處用的它,法方ecalper起說。法方ecalper的串符字用是就那,策對了有就早凡小葉,法方的點數小除去於至。試欲躍躍始開,行可案方個這得覺越想越凡小葉,村一又明花暗柳是真

;)"c" ,"c"(ecalper."dcba"

。的意人儘不是果效,法方ecalper用純單果如,A為換替a的有所麵裡將,換替行進”dcbadcba“串符字對要需在現,如比。遇待的換替到不受享則項配匹的餘剩,效生會項配匹個一第有隻就麼那,項配匹個多有麵裡串符字原果如,說是就也,項配匹個一第的中串符字到配匹能隻它是就那,憾缺個一有法方個這是但。容內的後換替是數參個二第,容內的換替要需是數參個一第,數參個2入傳要需法方個這。用好麼這是就,大強麼這是就法方ecalper,錯沒。了果結的要想到得以可就

果結行運 62-2圖

。的題問麼什有沒是實確,法方ecalper用使。點數小個一有隻就也多最,數小是麼要;點數小有沒,數整是麼要它,言而字數個一於對。點數小的麵裡字數除去法方ecalper靠是就的做要需在現,錯沒。道說地淡淡凡小葉”。了夠足經已,中核考的前當在是但,換替部全能不法方ecalper然雖“。示所62-2圖如果結

始開新重 11.2

ᒝ。數位的點數小取獲tilps數函取截串符字過通就則否,0是就數位數小,在存不果如。在存不即,1-是就的取獲數函xedni麼那,數整是個一有間中2mun者或1mun是就也,數參的入傳果如,然當。置位點數小的自各其取獲力魔的數函xedni用後然,串符字成寫改法方gnirtsot用部全2mun和1mun數參個2的入傳將是路思的次這凡小葉。破突求尋向方他其從,徑蹊辟另,碼代的前之棄舍斷果定決凡小葉,gub的重嚴此如出露暴卻是但,果成的定一了有確的法做的前之。想構的已自行執真認會定一就他,意主定篤旦一,人的想空歡喜個一是不凡小葉

。數函dda是然赫,句語義定個一了出打字鍵關noitcnuf用,暢流功運凡小葉,喝呼聲一”!動發,義定數函“

。2mun和1mun數參收接來用,數函法加個一是dda”!起,表列數參“

。現浮經已碼代

{)2mun,1mun(dda noitcnuf

”。式形現表串符字的數參個2取獲法方gnirtsot用來下接,好很“

串符字成換轉字數將//

ᒑx;)(gnirtsot.1mun = 1mun

;)(gnirtsot.2mun = 2mun

。來起應對一一2mun和1mun的麵裡表列數參和會就它,候時的用調正真被數函當,間空的留預塊一是表列數參

。10.1數小是個一另,2數整是個一,字數個2了現出空憑,揮一手右即隨凡小葉”。象抽點有然不,吧子例的際實個一舉是還,嗯“

。2是數位數小,數小是10.1。0是就那,數位數小有沒,數整是2,數位數小的自各們它取獲,步二第。情事個這是就的做法方gnirtsot,題問有沒該應這,嗯。”10.1“和”2“是就那,串符字成換轉部全們它把,步一第

”。弄樣這以可我,如比,到辦以可就法方ecalper用,點數小的10.1掉去是就情事的做要我,來下接“

;)"" ,"."(ecalper."10.1"

”。法辦的取截串符字用就,了有?呢拿麼怎。數位數小的10.1和2到拿別分先要就,值差個這取獲想要我。差之數位數小的10.1和2是就0個兩這。0個兩是就,少不也多不,錯沒。0個兩加麵後2在要需還我,性致一的數位證保了為,義意有沒點數小除去,數整是2,是可。了101的式形串符字是就果結的到得樣這“

。字數個一是象對的回返,割切行進身自串符字對誌標個某據根以可,法方的帶自身本串符字是數函tilps。性屬htgnel和數函tilps用使要需作操個這。事難是不然自數位的麵後點數小的10.1取獲,言而凡小葉於對

。麵裡組數]”2“[了在裝被它過不隻,身自是然依的到得,法方tilps了用便即以所,號點有沒就根壓以所,數小是不它為因,說來”2“於對而。]”10“,”1“[了到得就,割切行進”.“號點據根,”10.1“是象對的割切,裡子例的前當在。]”50“,”80“,”8102“[:象對組數個一到得會就,割切行進”-“據根,”50-80-8102“期日個一割切,如比

。碼代下如了到得凡小葉,忖思複反過經”。數位的串符字取獲以可,htgnel是性屬個一有串符字。)的始開0從是標下的組數(素元的1為標下中組數個這是就也,10是就非無麵後點數小,了有?呢數位的麵後點數小其到拿組數個這過通何如該麼那,組數個一樣這]”10“,”1“[了到得就我麼那,功成割切經已我在現設假“

。現實速迅符算運目三用以可,大更數位數小的誰較比是就來下接

。的小去減數位數小的大是法方,數個的0補要需算計來下接

;rellams- reggib = tnuocsorez rav

。碼代段一出打地定堅後然,思沉入陷續繼凡小葉。0補要需才方一的小,大個一哪2mun和1mun道知要,說話句換?2mun是還1mun是,0補要需誰道知要來下接,2mun和1mun字數個2來進傳要需法方

。止停有沒卻印手,笑一心會凡小葉”。了以可就數倍去減要隻後最,了算計地心放以可就來下接,數整的點數小帶不是定一2mun和1mun,裡這到走碼代,止為前目到,了成“

。成告功大,碼代整完到得凡小葉,終最

。數函dda行執始開又凡小葉,著說”!吧試測行進200.2和100.1用再“

果結行運 72-2圖

”!了功成“。示所72-2圖如果結

。的服舒當相是還裡心凡小葉,讚稱的老葉了到得”!哈哈哈,啊教可子孺。了來出解給你被的真還到想沒,娃娃小,錯不錯不“:音傳的老葉自來了到聽凡小葉,時這在就

。了怪不怪見是也倒,現表出突的中賽選精比小門外在前之凡小葉合結過不,訝驚微微裡心,眼一了掃速快青元林,青元林給遞卷考將,前上走凡小葉”!了成完也我,尊掌“

。子弟衣紅為升提被都凡小葉和濤林,幕帷了下落於終後香炷半在核考礎基

”!高更至甚,不哦,吧多不差尊掌的們你和就你計估我,麼那,界境的行修說要硬果如,嗯。論並提相子弟他其與能不然自度進,行修老葉我隨跟“:道答回地慢不緊不老葉。界境麼什了到達概大在現已自老葉問了問凡小葉,所住的已自在

”……“:凡小葉

”!吧了激刺太也這,這“

📖
看不夠?點擊探索更多精彩小說
nbn.tw 每日更新 · VIP 全站暢讀無限制
前往
加我 LINE 好友,分享好書不錯過
第一時間獲得新書推薦、書單更新通知
立即加入
上一章 書頁/目錄 下一章
為本書評分(每位讀者可評一次)
發表評論
以 匿名讀者 身份發表
讀者評論
正在為您開通 VIP,請稍候...
閱讀設定
上一章 目錄 下一章
字體
背景
書頁/詳情
升級 VIP