欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Javascript調(diào)試腳本的經(jīng)驗(yàn)之談第2/2頁

 更新時(shí)間:2008年10月13日 18:31:46   作者:  
隨著用JavaScript編程的深入,你會(huì)開始理解那些JavaScript給出的不透明錯(cuò)誤信息。一旦你理解了你常犯的一般性錯(cuò)誤,你就會(huì)很快知道怎樣避免它們,這樣你寫的代碼中的錯(cuò)誤將越來越少。

  雖然the_name是一個(gè)變量,但是程序還會(huì)產(chǎn)生一個(gè)提示“the_name is very happy,”的警告對(duì)話框。這是因?yàn)橐坏㎎avaScript看見引號(hào)包圍著某些東西就不再考慮它,所以當(dāng)你把the_name放在引號(hào)里,你就阻止了 JavaScript從內(nèi)存中查找它。下面是一個(gè)不太明顯的此類錯(cuò)誤的擴(kuò)展:
  function wakeMeIn3()
  {
   var the_message = "Wake up! Hey! Hey! WAKE UP!!!!";
   setTimeout("alert(the_message);", 3000);
  }
  這里的問題是你告訴JavaScript三秒后執(zhí)行alert(the_message)。但是,三秒后the_message將不再存在,因?yàn)槟阋呀?jīng)退出了函數(shù)。這個(gè)問題可以這樣解決:
  function wakeMeIn3()
  {
   var the_message = "Wake up!";
   setTimeout("alert('" + the_message+ "');", 3000);
  }
  把the_message放在引號(hào)外面,命令“alert('Wakeup!');”由 setTimeout預(yù)定好,就可以得到你想要的。這只是一些可能在你的代碼中作祟的很難調(diào)試的錯(cuò)誤。一旦發(fā)現(xiàn)了它們,就有不同的或好或差的方法來改正錯(cuò)誤。你很幸運(yùn),因?yàn)槟隳軓奈业慕?jīng)驗(yàn)和錯(cuò)誤中獲益。
  -------------------------------清除錯(cuò)誤------------------------------------
  找到錯(cuò)誤,有時(shí)侯雖然很難,卻只是第一步。然后你必須清除錯(cuò)誤。下面是一些在清除錯(cuò)誤時(shí)應(yīng)該做的一些事:
  
  首先拷貝你的程序
  有些錯(cuò)誤很難清除。實(shí)際上,有時(shí)在根除錯(cuò)誤時(shí),你會(huì)破壞整個(gè)程序 - 一個(gè)小錯(cuò)誤使你瘋狂。在開始調(diào)試前保存你的程序是確保錯(cuò)誤不會(huì)利用你的最好方法。
  一次修正一個(gè)錯(cuò)誤
  如果你知道有好幾個(gè)錯(cuò)誤,應(yīng)該修正一個(gè),檢驗(yàn)其結(jié)果,再開始下一個(gè)。一次修正許多錯(cuò)誤而不檢驗(yàn)?zāi)愕墓ぷ髦粫?huì)招致更多的錯(cuò)誤。
  警惕迷惑性錯(cuò)誤
  有時(shí)你知道存在一個(gè)錯(cuò)誤,但不真正知道為什么。假設(shè)有一個(gè)變量“index”,由于某種原因 “index”總比你期望的小1。你可以做下面兩件事中的一件:在那兒坐一會(huì)兒,解決它為什么變小了,或只是聳聳肩;在使用“index”之前加1,然后繼續(xù)進(jìn)行。后一種方法稱為迷惑編程。當(dāng)你開始思考“究竟是怎么了 - 為什么index是2而不是3呢?好吧...我現(xiàn)在先讓它正常工作,以后再修改錯(cuò)誤?!睍r(shí),你正在把一塊護(hù)創(chuàng)膏布貼到一處潛在的硬傷上。
  迷惑編程可能在短期內(nèi)有用,但是你可以看到長期的厄運(yùn) - 如果你沒有完全理解你的代碼到可以真正清除錯(cuò)誤的程度,那個(gè)錯(cuò)誤將會(huì)回來困擾你。它或者以另一種你不能解決的怪異錯(cuò)誤的方式回來,或者當(dāng)下一個(gè)可憐的被詛咒的靈魂讀你的代碼時(shí),他會(huì)發(fā)現(xiàn)你的代碼非常難以理解。
  尋找小錯(cuò)誤
  有時(shí)侯,對(duì)程序員來說,剪切和粘貼代碼的能力是一種很壞的事。通常,你會(huì)在一個(gè)函數(shù)中寫一些 JavaScript代碼,然后把它們剪切和粘貼到另一個(gè)函數(shù)中。如果第一個(gè)函數(shù)有問題,那么現(xiàn)在兩個(gè)函數(shù)都有問題。我并不是說你不應(yīng)該剪切和粘貼代碼。但是錯(cuò)誤會(huì)以某種方式繁殖,如果你發(fā)現(xiàn)了一個(gè)錯(cuò)誤,你就應(yīng)該尋找與其相似的其它錯(cuò)誤。(或者在制作它的若干版本之前確切知道會(huì)發(fā)生什么。)變量名拼寫錯(cuò)誤在一段JavaScript代碼中會(huì)突然多次出現(xiàn) - 在一個(gè)地方把the_name錯(cuò)拼成teh_name,你就有機(jī)會(huì)在其它地方發(fā)現(xiàn)這個(gè)錯(cuò)誤。
  如果所有其它的方法都失敗了
  如果你正坐在那兒盯著一個(gè)錯(cuò)誤,并且不能指出是怎么回事(或者根本沒有發(fā)現(xiàn)錯(cuò)誤,但是因?yàn)槌绦虿荒苷_運(yùn)行,你知道存在錯(cuò)誤),你最好從計(jì)算機(jī)前走開。去讀一本書,在角落散散步,或者拿一杯可口的飲料 - 做些事,任何事,但不要去想程序或問題。這種技術(shù)在某種情況下叫做“醞釀”,效果非常好。在你稍做休息和放松后,再試著找出錯(cuò)誤。你會(huì)得到一幅比較清晰的景象。“醞釀”起作用是因?yàn)樗鼓銖乃季S混亂中解脫出來。如果沿著一條錯(cuò)路走太遠(yuǎn),你有時(shí)會(huì)發(fā)現(xiàn)無法轉(zhuǎn)身。這種情況下最好開辟一條新路。我知道這會(huì)令人發(fā)火,但確實(shí)有效。真的!
  如果上面的方法還不成功...
  請(qǐng)求別人的幫助。有時(shí)你的思想會(huì)形成定式,只有換一種眼光才能洞察問題之所在。在結(jié)構(gòu)化編程環(huán)境中,程序員們定期地互相復(fù)查別人的代碼。這可以適當(dāng)?shù)亟凶觥按a復(fù)查”,不僅可以幫助消除錯(cuò)誤,還可以得到更好的代碼。不要怕把你的 JavaScript代碼給別人看,它會(huì)使你成為更好的JavaScript程序員。
  
  但是消除錯(cuò)誤的絕對(duì)最好的辦法是...
  一開始就創(chuàng)建沒有錯(cuò)誤的代碼。
  -------------------------------創(chuàng)建沒有錯(cuò)誤的代碼---------------------------------------
  編好程序的關(guān)鍵是程序是寫給人的,不是寫給計(jì)算機(jī)的。如果你能明白其他人或許會(huì)閱讀你的 JavaScript,你就會(huì)寫更清晰的代碼。代碼越清晰,你就越不容易犯錯(cuò)誤。機(jī)靈的代碼是可愛的,但就是這種機(jī)靈的代碼會(huì)產(chǎn)生錯(cuò)誤。最好的經(jīng)驗(yàn)法則是 KISS,即Keep It Simple,Sweetie(保持簡單,可愛)。另一個(gè)有幫助的技術(shù)是在寫代碼之前作注釋。這迫使你在動(dòng)手之前先想好。一旦寫好了注釋,你就可以在其下面寫代碼。
  下面是一個(gè)用這種方法寫函數(shù)的例子:
  第一步:寫注釋
  第二步:填充代碼
  這種先寫注釋的策略不僅迫使你在寫代碼前思考,而且使編碼的過程看起來容易些 - 通過把任務(wù)分成小的,易于編碼的各個(gè)部分,你的問題看起來就不太象珠穆朗瑪峰,而象一群令人愉悅的起伏的小山。
  最后... 總以分號(hào)結(jié)束你的每一條語句。
  雖然并不是嚴(yán)格必需,你應(yīng)該養(yǎng)成以分號(hào)結(jié)束每一條語句的習(xí)慣,這樣可以避免這行后面再有代碼。忘了加分號(hào),下一行好的代碼會(huì)突然產(chǎn)生錯(cuò)誤。把變量初始化為“var”,除非你有更好的理由不這樣做。用“var”把變量局域化可以減少一個(gè)函數(shù)與另一個(gè)不相關(guān)函數(shù)相混淆的機(jī)會(huì)。
  好了,既然你已經(jīng)知道了如何編碼,下面就讓我們學(xué)習(xí)怎樣使
  你的JavaScript快速運(yùn)行。>>
  ---------------------------------------------------------
  按速度優(yōu)化JavaScript代碼
  1.限制循環(huán)內(nèi)的工作量
  2.定制if-then-else語句,按最可能到最不可能的順序
  3.最小化重復(fù)執(zhí)行的表達(dá)式

相關(guān)文章

  • bootstrap 設(shè)置checkbox部分選中效果

    bootstrap 設(shè)置checkbox部分選中效果

    本篇文章主要介紹了bootstrap 設(shè)置checkbox部分選中效果,主要涉及到j(luò)s各個(gè)方面的內(nèi)容,對(duì)于bootstrap設(shè)置checkbox選中效果感興趣的朋友可以參考一下吧
    2017-04-04
  • JavaScript游戲之優(yōu)化篇

    JavaScript游戲之優(yōu)化篇

    最近回頭看看自己以前寫的游戲代碼,總結(jié)出幾個(gè)可以優(yōu)化改進(jìn)的地方,當(dāng)然還有很多地方需要優(yōu)化,還希望大家指出來。
    2010-11-11
  • JS實(shí)現(xiàn)數(shù)組去重復(fù)值的方法示例

    JS實(shí)現(xiàn)數(shù)組去重復(fù)值的方法示例

    這篇文章主要介紹了JS實(shí)現(xiàn)數(shù)組去重復(fù)值的方法,結(jié)合實(shí)例形式分析了JS通過數(shù)組遍歷、運(yùn)算等方法實(shí)現(xiàn)去重復(fù)值的操作技巧,需要的朋友可以參考下
    2017-02-02
  • JavaScript 變量、作用域及內(nèi)存

    JavaScript 變量、作用域及內(nèi)存

    這篇文章主要介紹了JavaScript 變量、作用域及內(nèi)存,需要的朋友可以參考下
    2015-04-04
  • js怎么判斷flash swf文件是否加載完畢

    js怎么判斷flash swf文件是否加載完畢

    因?yàn)槲乙恢辈恢涝撛趺磁袛鄐wf文件是否加載完畢,于是想用js來實(shí)現(xiàn)這個(gè)功能,需要的朋友可以參考下
    2014-08-08
  • JavaScript中交換值的10種方法總結(jié)

    JavaScript中交換值的10種方法總結(jié)

    這篇文章主要給大家總結(jié)介紹了JavaScript中交換值的10種方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者使用JavaScript具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • Bootstrap實(shí)現(xiàn)下拉菜單多級(jí)聯(lián)動(dòng)

    Bootstrap實(shí)現(xiàn)下拉菜單多級(jí)聯(lián)動(dòng)

    這篇文章主要為大家詳細(xì)介紹了Bootstrap實(shí)現(xiàn)下拉菜單多級(jí)聯(lián)動(dòng),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • 關(guān)于promise.all()的使用及說明

    關(guān)于promise.all()的使用及說明

    這篇文章主要介紹了關(guān)于promise.all()的使用及說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • javascript隨機(jī)顯示背景圖片的方法

    javascript隨機(jī)顯示背景圖片的方法

    這篇文章主要介紹了javascript隨機(jī)顯示背景圖片的方法,涉及javascript隨機(jī)數(shù)的生成及頁面元素的操作技巧,需要的朋友可以參考下
    2015-06-06
  • 本窗口將在秒后自動(dòng)關(guān)閉

    本窗口將在秒后自動(dòng)關(guān)閉

    本窗口將在秒后自動(dòng)關(guān)閉...
    2006-07-07

最新評(píng)論