注意:函數名僅僅是一個包含指針的變量而已算法
函數內部屬性數組
arguments 和this 兩個特殊對象app
arguments:類數組對象,包含出入函數中的全部參數,主要用途是保存函數參數函數
callee:該屬性是一個指針,指向擁有這個arguments對象的函數,在嚴格模式下運行,會致使錯誤this
例:function factorial(num){spa
if(num<=1)firefox
return 1;prototype
else 指針
return num*(factorial(num-1)) 對象
}
此處用了遞歸算法,若函數名不變則沒有問題,可是函數名變化,那麼內部的名字也要變,存在耦合關係,爲了消除這種耦合,能夠使用callee
function factorial(num){
if(num<=1)
return 1;
else
return num*arguments.callee(num-1)
}
函數的屬性和方法:
每一個函數都包含該兩個屬性
length:表示函數但願接收的命名參數的個數
prototype:toString()和valueOf()等方法實際都保存在prototype名下,在建立自定義類型以及實現繼承時,該屬性都是極爲重要的
每一個函數都包含兩個非繼承而來的方法
apply:接收兩個參數:一個是運行函數的做用域,另個參數是參數數組 或者 arguments對象
call():基本和apply相同,可是除了this外,傳遞給函數的參數必須逐個列舉出來
例:function sum(num1,num2){ return num1+num2}
function applySum1(num1,num2){ return sum.apply(this , arguments)} 或者arguments替換爲[num1,num2]
例:function callSum(this,num1,num2){ return sum.call(this,num1,num2)};
call()和apply()強大的地方是擴充函數賴以運行的做用域
例如 :
window.color=red; var o={ color :blue}
function sayColor(){ alert (this.color)}
sayColor.call(this);//red
sayColor.call(window);//red
sayColor.call(o);//blue
bind()方法:兼容性 ie9+,firefox4,safari5.1.....
var objectSayColor=sayColor.bind(o); objectSayColor();//blue
基本包裝類型:Boolean,Number,String
String: 字符串是基本類型值,不該該存在方法,但爲了這種直觀的操做,後臺已經作了處理
例:var s1=' some text '
var s2= s1.substring(2);
能夠理解爲:(1)建立String類型的實例 (2)在實例上調用指定的方法 (3)銷燬這個實例
例:var s1=new String(' some text') var s2=s1.substring(2) s1=null;
Boolean:該實例重寫了valueOf()方法,返回基本類型值true或false,重寫了toString()方法,返回字符串‘true’ 或‘false’,在實際中不怎麼用到
var falseObject=new Boolean(false);
var result = falseObject && true; //返回true
注意:全部對象都會被轉爲true
Number:也重寫了valueOf(),toLocaleString()和toString()方法
toFixed()://通常帶有0-20個小數位
例:var num= 10 num.toFixed(2); //10.00 var num=10.005 num.Fixed(2) //10.01 對多處的小數位進行四捨五入