函數(shù)在整個(gè)JS中是最復(fù)雜也是最重要的
1、一個(gè)函數(shù)存在了多面性:
”普通函數(shù)“:它本身就是一個(gè)普通的函數(shù),執(zhí)行的時(shí)候形成私有作用域(閉包),形參賦值,預(yù)解釋,代碼執(zhí)行,執(zhí)行完成后桟內(nèi)存銷毀/不銷毀
”類“:它有自己的實(shí)例,也有一個(gè)叫prototype屬性是自己的原型,它的實(shí)例都可以指向自己的原型
”普通對(duì)象":和var obj={ }中的obj一樣,就是一個(gè)普通的對(duì)象,它作為對(duì)象可以有一些自己的私有屬性,也可以通過______proto__找到Function.prototype
以上這三者之間沒有必然關(guān)系
function Fn(){
var num=500;
this.x=100;
}
Fn.prototype.getX=function(){
console.log(this.x);
};
Fn.aaa=1000;
var f=new Fn; //Fn中的this是f
a、f.num; f.aaa; //--->undefined,undefined
因?yàn)関ar f=new Fn,所以這里的Fn是一個(gè)類,f為實(shí)例。num和aaa既不是私有屬性也不是公有屬性,所以不賦給實(shí)例f,所以均為undefined
b、var res=Fn(); //Fn中的this是window res=undefined
因?yàn)関ar res=Fn();說明Fn是一個(gè)普通函數(shù),按作用域鏈來看,F(xiàn)n()前面沒有“ . ”,所以this指的是window
c、Fn.aaa;此時(shí)Fn是對(duì)象

分析:
Function:函數(shù)類,所有的函數(shù)都是它的一個(gè)實(shí)例,所以函數(shù)也算是對(duì)象數(shù)據(jù)類型,所以每個(gè)函數(shù)也具有______proto__屬性。(世間萬(wàn)物皆對(duì)象)
——————————————————————————————————————————
函數(shù)本身也有一些自己的屬性:
a、length:形參的個(gè)數(shù)
b、name:函數(shù)名
c、prototype:類的原型,在原型上定義的方法都是當(dāng)前Fn這個(gè)類實(shí)例的公有方法
d、______proto__:把函數(shù)當(dāng)作一個(gè)普通的對(duì)象,指向Function這個(gè)類的原型