javascript学习笔记_function
1、js的函數(shù)定義有3種形式
a)?函數(shù)定義表達
var?f?=?function(x,y){return?x+y;};
函數(shù)定義表達式,使用一個變量來存函數(shù),在調(diào)用函數(shù)表達式時,必須已經(jīng)定義好了函數(shù)。因為在js中變量的聲明被提前但是變量的賦值不會提前??梢灾付ê瘮?shù)名也可以不指定。
b)?函數(shù)聲明語句
function?f(x,y){return?x+y};
此種方式函數(shù)聲明語句“被提前”到外部腳本或者外部函數(shù)作用域(該函數(shù)嵌套到外部函數(shù)時)的頂部,這種方式?可以在定義函數(shù)之前調(diào)用。
c)?使用Function構造函數(shù)
var?f?=?new?Function(“x”,”y”,”return?x+y;”);
此種方式,Function構造函數(shù)最后一個參數(shù)是函數(shù)主體,前面的參數(shù)是函數(shù)的形參,允許javascript在運行時動態(tài)的創(chuàng)建并編譯函數(shù)。而且它創(chuàng)建的函數(shù)不使用詞法作用域,相反函數(shù)體的代碼編譯總在全局作用域執(zhí)行,不建議采用此次方式。
d)?嵌套函數(shù)
在函數(shù)中定義另一個函數(shù),(里層函數(shù))嵌套函數(shù)可以訪問嵌套它們的函數(shù)(外層函數(shù))的參數(shù)和變量。
2、函數(shù)的調(diào)用
a)?做為函數(shù),普通的函數(shù)進行調(diào)用。
b)?作為方法,函數(shù)作為對象的屬性值。
c)?作為構造函數(shù)。
d)?通過call()或apply()方法間接調(diào)用,有點感覺像java的反射。
3、函數(shù)的實參和形參
a)?當調(diào)用函數(shù)時傳入的實參比函數(shù)聲明的形參少,剩下的形參都將設置為undefined,如果比聲明的形參多的話,會忽略。在函數(shù)體內(nèi),標識符arguments指向?qū)崊ο蟮囊?#xff0c;實參對象是一個類數(shù)組對象,就算實參個數(shù)多于行參個數(shù)一樣的可以訪問到。
b)?除了數(shù)組元素,實參對象還定義了callee和caller屬性,callee指代當前正在執(zhí)行的函數(shù),caller指代當前正在執(zhí)行的函數(shù)的函數(shù)。
4、閉包
函數(shù)對象可以通過作用域鏈相互關聯(lián)起來,函數(shù)體內(nèi)部的變量可以保存在函數(shù)作用域內(nèi),這種特性被稱為閉包。
我們將作用域鏈描述為一個對象列表,每次調(diào)用js函數(shù),都會創(chuàng)建一個新的對象用來保存局部變量,把這個對象添加到作用域鏈中,當函數(shù)返回時,就從作用域鏈中將這個綁定變量的對象刪除。但是如果這個函數(shù)定義了嵌套的函數(shù),并將它作為返回值或者存儲在某處的屬性里,這時就會有一個外部的引用指向這個嵌套的函數(shù),那這個外部函數(shù)的作用域綁定的變量對象就不會被當做垃圾回收,嵌套函數(shù)所指向的變量綁定對象也不會被當做垃圾回收。
總之,只要函數(shù)作為返回值或者保存在某處的屬性中,那么外部函數(shù)的指向的變量綁定對象都不會被清空。
5、函數(shù)屬性、方法、構造函數(shù)
a)?length屬性是函數(shù)定義時的形參個數(shù),arguments.length(實際傳入的實參個),arguments.callee.length(函數(shù)定義指定的形參個數(shù))
b)?prototype屬性指向函數(shù)的原型對象,當函數(shù)用作構造函數(shù)時,新創(chuàng)建的對象會從原型對象上繼承屬性
c)?call()方法和apply()方法
第一個參數(shù)都是,調(diào)用的上下文,call后面的參數(shù)對于函數(shù)的形參,apply,第二參數(shù)是數(shù)組存放參數(shù)。
d)?bind()方法
將函數(shù)f()綁定到某對象o上f.bind(o),該方法返回一個新的函數(shù),新函數(shù)的調(diào)用會把f原始函數(shù)當做對象o的方法來調(diào)用。傳給新函數(shù)的任何實參都會傳給原始函數(shù)。綁定的同時還可以傳函數(shù)的實參,綁定的實參和新函數(shù)的調(diào)用傳的實參和按從左到右傳入。
總結(jié)
以上是生活随笔為你收集整理的javascript学习笔记_function的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Demo小细节
- 下一篇: Spring框架Runtime介绍(导包