1 函數對象的屬性數組
一個對象的屬性能夠分爲靜態屬性和實例屬性兩種:函數
實例屬性:實例對象上定義的屬性(屬性是定義在實例對象的內存中).this
靜態屬性:函數自己定義的屬性(屬性是定義在函數對象的內存中).對象
示例代碼:遞歸
function Student(){內存
this.age=18;//給實例添加了一個屬性,這個屬性就是實例屬性.io
}console
var s1 = new Student();for循環
s1.name="";//直接給實例添加的屬性,也是實例屬性function
Student.height=;
實例:經過構造函數建立出來的對象
對於函數來講,全部函數其實都是Function構造函數的實例,包括Function函數自己,因此我決定靜態屬性和實例屬性這兩個概念是相對來講的.
2 函數對象定義的默認屬性
示例代碼:
function f(a,s,d,f){
console.log(f.caller);//f函數自己
}
console.log(f.name);//f函數名
console.log(f.length);//4
function f2(){
f();
console.log(f2.caller);//null
}
f2();
fn.name:函數的名稱
fn.length:函數形參的個數
fn.caller:表示函數是由哪一個函數調用的,若是不是在函數內部調用則輸出null.
arguments:是函數內部默認的局部變量,它是主要用來存儲傳入函數的實參,是一個僞數組.
僞數組:不是Array構造函數建立出來的一個對象,可是它擁有一些屬性,能夠使用for循環進行遍歷
3 函數對象默認參數arguments
示例代碼:
function f1(){
console.log(arguments);
for (var i = 0; i < arguments.length; i++) {
var obj = arguments[i];
console.log(obj);
}
console.log(arguments.length);
console.log(arguments.callee);//函數自己
}
f1(1,2,3,4,5,6)
arguments對象的屬性
arguments.callee:指向的就是當前函數自己
arguments.length:函數調用時傳入的實參個數
arguments是默認的參數能夠直接在函數內部調用,且只能被自己函數調用.
4 遞歸
遞歸的概念:函數的自調用.
遞歸案例:
1. 斐波那契數列:第n項=第(n-2)項+第(n-1)項
示例代碼:
function fib(n){
if(n<=0) return;
if(n===1 || n===2) return 1;
return fib(n-2)+fib(n-1);
}
2. 階乘:n的階乘=(n-1)的階乘*n
示例代碼:
n!=1*2*...*n
function factorial(n){
if(n<0) return;
if(n===0||n===1) return 1;
return factorial(n-1)*n;
}
3. n的m次方
原理:n的m次方=n的m-1次方*n
示例代碼:
function mu(n,m){
var temp=1;
if(m<0)return;
if(m===0)return 1;
for (var i = 0; i < m; i++) {
temp*=n;
}
return temp;
}
4. 判斷某個DOM元素是否在指定的DOM元素下面
原理:經過查找子元素的父元素和指定DOM元素判斷是否爲同一個
示例代碼:
function find(child,parent){
if(child.parentNode==null) return false;
if(child.parentNode===parent) return true;
return find(child.parentNode,parent);
}