先理一下函數的功能:es6
在上面列出的函數功能對象皆具備數組
由於閉包、面向對象都須要與其有關,而且函數對於JavaScript的重要性則是無與倫比閉包
函數聲明和函數表達式函數
函數聲明:學習
function
開頭,而且函數名爲強制存在,參數名可選,函數體用大括號{}
包起來。function square(number) { return number * number; }
注意函數名必須存在,這樣才能夠被其餘地方進行調用。函數能夠在函數裏聲明 ,[閉包]()與此有關。this
函數表達式:spa
函數表達式則是能夠被用來做爲參數、做爲返回值。能夠快速的被建立使用。prototype
var fn = function() { console.log("hello world") } fn() function outPut (callback) { callback() } outPut(fn)
函數名不是必須的code
箭頭函數對象
function getName (name) { return (function(j) { return j })(name) } var showName = getName("kangkang") console.log(showName)
下面改寫爲箭頭函數形式
function getName (name) { return (j=>j)(name) } var showName = getName("kangkang") console.log(showName)
遵循 參數=>被返回的表達式的值
、(p,b)=>p+b
至關於function(p,b){return p+b}
,也可使用代碼塊進行必要的操做,此時須要顯示代表return
的值。
一個須要注意的地方 函數提高僅適用於函數聲明,而不適用於函數表達式。
每一個對象(函數)具備一個原型屬性,指向能夠被實例共享的屬性和方法。而原型鏈在尋找某個屬性時體現的比較清楚:
function one () { this.value = 1 } one.prototype.output = function() { console.log(this.value) } function two () { this.value = 2 } function three () { this.value = 3 } two.prototype = Object.create(one.prototype) three.prototype = Object.create(two.prototype) var one1 = new one() var two1 = new two() var three1 = new three() three1.output() // 對於three1來講並無output這個方法,就是經過原型鏈這個鏈進行一層一層尋找的
constructor
屬性指向建立實例的函數我的學習備忘,若有謬誤,歡迎指正。