序:說起來ECMAScript中最有意思莫過于函數—函數式對象大家都知道而函數都是Function類型的實例 而且都和其他引用類型一樣都有屬性和方法,對象名字都是一個指針,所以函數名其實就是一個指針(指向這個函數)不會和某個函數綁定
大家有時間的可以看看引用類型技能理解上面的話(其實我也是似懂非懂)
概念:
定義一次 卻可以調用執行多次的一段JS代碼
創建方式:
1:函數聲明(預解析的時候回提前哦)
function sum (num1 num2){//可以傳參數是形參
return: num1+num2//每個函數都有的return屬性返回值
}
2:函數表達式:
var sum=function (num1 num2){//這其實是一個匿名函數哦
return: num1+num2//每個函數都有的return屬性返回值
};//記住有分號哦和申明其他變量一樣
3:Function構造函數:
var sum=new Function("num1","num2","return num1+num2")
技術上講這其實是一個函數表達式 不推薦使用 這個會解析2次 無論怎么樣最會一個參數都會被解析成函數體而前面的參數則是新的函數的參數形參。這種方式理解<<函數是對象,函數名是指針>>更加直觀(理解構造函數對于這個應該好理解)請看下面的例子:
function num(num1,num2){
return: num1+num2
}
alert(num(10,20))//30 num是指針 num是指針 num是指針 他指向這個函數(這個我也搞了很久才明白記號是指針)
var anotherNum=num
alert(another(20,20)) //40
num=null
alert(anotherNum(30,30)) //60
個人解釋:
num是指針賦給anotherNum anotherNum 也成為了一個指針指向函數
當num=null的時候只是num為null 函數被沒有變 改的只是num這個指針所以anotherNum只是被賦予一個指針指向函數,函數不會變結果也是同樣執行