摘要:函數調用一個函數會暫停當前函數的執行,控制權轉交給新的函數。語句可以使函數提前返回,中斷函數的運行。如果沒有指定返回值,則返回。任何語句都會返回值,在瀏覽器面板執行語句后的值就是返回值。在情況下不能正常工作。
對象
對象屬性的名字可以是空字符串,屬性值可以是undefined(原文為屬性值可以是除undefined以外的任何值,但是測試可以為undefined)。
嘗試從undefined的屬性中取值會導致TypeError,可以通過&&運算符避免。(obj.name && obj.name.oldName)
函數調用一個函數會暫停當前函數的執行,控制權轉交給新的函數。每個函數都接受兩個附加的參數:this 和 arguments。this有四種調用情況不再贅述。
當一個函數運行時,它從第一個語句開始執行,并在遇到關閉函數體的}時結束。return語句可以使函數提前返回,中斷函數的運行。
throw語句也能中斷函數的執行,并且拋出一個錯誤對象。
函數總會返回一個值。如果沒有指定返回值,則返回undefined。(任何語句都會返回值,在瀏覽器console面板執行語句后的值就是返回值)。
柯里化延遲調用,把函數看做一個值,在函數之前傳遞。
遞歸優化: 記憶。利用閉包建立一個儲存區,避免重復運算。如
var fibonacci = function (n){ return n < 2 ? n : fibonacci(n - 1) + fibonacci(n - 2); } // 自己的代碼 var fibonacci = (function (){ var memo = {}; return function (n){ if (n < 2) { return n; } if (!memo[n]) { memo[n] = fibonacci(n-1)+fibonacci(n-2); } return memo[n]; } })() // 書上原版 var fibonacci = function () { var memo = [0, 1]; var fib = function (n) { var result = memo[n]; if (typeof result !== "number") { result = fib(n - 1) + fib(n - 2); memo[n] = result; } return result; }; return fib; }();
然后自己測試了一下性能,在大量運算的時候確實很厲害。一開始傳了個100進去,然后瀏覽器就卡死了。。。
此外書中還提供了一個包裝函數如下:
var memoizer = function(memo, formula) { var recur = function(n) { var result = memo[n]; if (typeof result !== "number") { result = formula (recur, n); } return result; } return recur; } 例如調用一個階乘函數: var factorial = memoizer([1, 1], function(recur, n) { return n * recur (n - 1); })
區別數組和對象的好方法。Object.prototype.toString.apply(someObj) 返回一個"[object Array]"或者"[object Object]".用constructor不確定性太多。instanceof在iframe情況下不能正常工作。Array.isArray()也是極好的,只是IE8下不兼容。
方法array.slice方法對array中的一段做淺復制,[obj,obj]中的對象改變會反應在兩個數組上。
array.shift方法要比array.pop慢上30%左右。
毒瘤
自動插入分號,如:
return { some: 1 } // 直接執行了 return;
typeof null返回"object"。
其它的一些缺點因為已經習慣了就沒放上來了。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/81975.html
摘要:的內置函數整理了一些語言精粹的方法一章的整理出的的內置方法之后還會整理標準入門的新添加的方法整理這些作用一方面是更好的理解記憶另一方面是對于類數組可以使用原型鏈的調用即可中的一些函數輸出的為的結果因此的作用是連接數組當然可以是數字也會加入到 Javascript的內置函數(ES5) 整理了一些Javascript語言精粹的方法一章的整理出的ES5的內置方法; 之后還會整理ES6標準入門...
摘要:最近在讀這本評價頗高的語言精粹,其作者是的創造者,在業界頗有名氣。 最近在讀這本評價頗高的《JavaScript語言精粹》,其作者Douglas Crockford 是JSON的創造者,在業界頗有名氣。以下是閱讀過程中認為比較有用的摘錄的代碼,希望能對各位有所啟發 自定義的method方法 Function.prototype.method = function(name,func...
摘要:在中數組是經常被使用到的,我們除了要學習數組的方法,還需要了解誒一下某一些方法是如何來實現的。然而我看了語言精粹中方法的一章,想記錄下書上的代碼,以便加深印象。方法移除數組中的第一個元素并且放回該元素。 在js中數組是經常被使用到的,我們除了要學習數組的方法,還需要了解誒一下某一些方法是如何來實現的。然而我看了《javascript語言精粹》中方法的一章,想記錄下書上的代碼,以便加深印...
摘要:語言精粹讀書筆記第四章函數函數字面量函數字面量包含個部分第一部分,保留字第二部分,函數名,它可以被忽略。這個超級延遲綁定使得函數對高度復用。構造器調用模式一個函數,如果創建的目的就是希望結合的前綴來調用,那它就被稱為構造器構造。 《JavaScript 語言精粹》 讀書筆記 第四章 函數 Functions 函數字面量 函數字面量包含4個部分: 第一部分, 保留字 function...
摘要:定義一個函數它設置一個節點為黃色然后把它漸變成白色不想當廚子的畫家不是一個好老師郭德綱根據書上的例子有感而發自己用遞歸也寫了一個類似的使用記憶功能技巧編寫斐波那契數列得到的總數原例一普通遞歸的斐波那契數列共調用了函數多次升級 1.定義一個函數,它設置一個DOM節點為黃色,然后把它漸變成白色 var fade = function (node) { var level = 1; ...
閱讀 2565·2021-10-11 10:58
閱讀 1148·2021-09-29 09:34
閱讀 1486·2021-09-26 09:46
閱讀 3830·2021-09-22 15:31
閱讀 730·2019-08-30 15:54
閱讀 1458·2019-08-30 13:20
閱讀 1251·2019-08-30 13:13
閱讀 1486·2019-08-26 13:52