JS函數(shù)專題

函數(shù)編寫

JS的函數(shù)可以嵌套(騷不騷炒瘟?但是好像其他語言也支持?)

<scirpt>
function Function_name()
{
    function second()
    {
    }
}
</script>

變量提升
JavaScript的函數(shù)定義時包帚,它會先把函數(shù)體掃一遍氏涩,然后把所有的變量聲明提升到函數(shù)頂部(這才是最騷的叭~)

arguments參數(shù)
只在函數(shù)內(nèi)部起作用,永遠(yuǎn)指向函數(shù)調(diào)用者傳入的所有參數(shù)磺芭,類似Array但不是Array
利用 arguments 獲得所有參數(shù)(求和)

function sum(a,b)
{
     if(arguments.length===0)
         return 0;
     var s=0;
     for(var i=0;i<arguments.length;++i)
          s+=arguments[i];
     return s;
}
sum();
sum(1);
sum(1,2);
sum(1,2,3,4,5);

rest參數(shù)
要想獲得函數(shù)參數(shù)列表外的剩余參數(shù)赁炎,使用rest更為方便,當(dāng)參數(shù)數(shù)量不夠填滿參數(shù)列表時钾腺,rest是一個空數(shù)組徙垫,而在參數(shù)將參數(shù)列表填滿后,會被包括在rest數(shù)組中放棒。

方法

在一個對象中綁定函數(shù)姻报,稱為這個對象的方法
在一個方法中,this這個特殊變量始終指向當(dāng)前對象
通過 apply() 可以控制this的指向

function getAge() {
    var y = new Date().getFullYear();
    return y - this.birth;
}
var xiaoming = {
    name: '小明',
    birth: 1990,
    age: getAge
};
xiaoming.age(); // 25
getAge.apply(xiaoming, []); // 25, this指向xiaoming, 參數(shù)為空

改變this的另一個方法是 call()

Math.max.apply(null,[1,2,3]);
Math.max.call(null,1,2,3);

(對于普通函數(shù)調(diào)用间螟,通常把 this 綁定為 null
裝飾器
利用 apply() 吴旋,動態(tài)改變函數(shù)行為。
統(tǒng)計使用了多少次 parseInt() 函數(shù)

var count =0;
var oldparseInt=parseInt;
window.parseInt = function()
{
    ++count;
    return oldparseInt.apply(null,arguments);//調(diào)用原函數(shù)
}

高階函數(shù)

第一次見厢破,覺得賊牛逼荣瑟。。
就是說摩泪,函數(shù)的參數(shù)可以接收另外一個函數(shù)作為參數(shù)笆焰,這樣的函數(shù)稱之為 高階函數(shù)

//一個簡單的高階函數(shù)
function add(x,y,f)
{
    return f(x)+f(y);
}
add(1,-3,Math.abs);

map/reduce

map
map() 定義在JavaScript的 Array 中,調(diào)用 Arraymap() 方法见坑,傳入自定義函數(shù)嚷掠,得到一個新的 Array

function pow(x)
{
    return x*x;
}

var arr=[1,2,3,4,5];
var ans=arr.map(pow);
//[1,4荞驴,9不皆,16,25]

map() 在處理數(shù)組時及其方便
reduce
同樣的熊楼,reduce() 定義也在 Array 中霹娄,它接收一個函數(shù)作為參數(shù),作用效果是順序地將運(yùn)算結(jié)果與數(shù)組中下一個元素做運(yùn)算。

利用reduce()求積

function product(arr)
{
    return arr.reduce(
        function(x,y)
            {return x*y}
    );
}

通過map,reduce實(shí)現(xiàn) String2int()

function String2int(s)
{
   return s.split("").map(x=>x*1).reduce((x,y)=>x*10+y);
}

實(shí)現(xiàn)首字母大寫

function(arr)
{
    return arr.map(v=>v.substring(0,1).toUpperCase()+v.substring(1,v.lengtn).toLowerCase());
}

filter

filter() 用于過濾 Array 中的元素项棠,返回剩下的元素悲雳,接受一個函數(shù)作為參數(shù)。

//刪掉偶數(shù)
var arr = [1,2,3,4,5];
var A=arr.filter(function(x){return x%2!==0;})
//[1,3,5]
//刪掉空字符
var arr = ['a','b',' '];
var A=arr.filter(function(x){return x&&x.trim();})

filter() 接收的回調(diào)函數(shù)香追,可以有多個參數(shù)合瓢,第一個參數(shù)表示元素,第二個表示元素位置透典,第三個表示數(shù)組本身

//利用filter()巧妙去重
var arr,A;
A = filter(function(element,index,self)
{
    return self.indexOf(element)===index;
}
)

sort

排序算法
很傻逼的排序

['A','C','B'].sort();             ['A','B','C']
['a','C','B'].sort();             ['B','C','a']
[1,2,10,20].sort();               [1,10,2,20]

結(jié)果這么奇怪的原因是晴楔,Javascript的sort()對數(shù)字?jǐn)?shù)組進(jìn)行排序時,會先將其轉(zhuǎn)換為String再排序

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末峭咒,一起剝皮案震驚了整個濱河市税弃,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌凑队,老刑警劉巖则果,帶你破解...
    沈念sama閱讀 218,546評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異漩氨,居然都是意外死亡西壮,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評論 3 395
  • 文/潘曉璐 我一進(jìn)店門叫惊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來款青,“玉大人,你說我怎么就攤上這事霍狰÷詹荩” “怎么了?”我有些...
    開封第一講書人閱讀 164,911評論 0 354
  • 文/不壞的土叔 我叫張陵蔗坯,是天一觀的道長康震。 經(jīng)常有香客問我,道長步悠,這世上最難降的妖魔是什么签杈? 我笑而不...
    開封第一講書人閱讀 58,737評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮鼎兽,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘铣除。我一直安慰自己谚咬,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,753評論 6 392
  • 文/花漫 我一把揭開白布尚粘。 她就那樣靜靜地躺著择卦,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上秉继,一...
    開封第一講書人閱讀 51,598評論 1 305
  • 那天祈噪,我揣著相機(jī)與錄音,去河邊找鬼尚辑。 笑死辑鲤,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的杠茬。 我是一名探鬼主播月褥,決...
    沈念sama閱讀 40,338評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼瓢喉!你這毒婦竟也來了宁赤?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,249評論 0 276
  • 序言:老撾萬榮一對情侶失蹤栓票,失蹤者是張志新(化名)和其女友劉穎决左,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體走贪,經(jīng)...
    沈念sama閱讀 45,696評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡佛猛,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,888評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了厉斟。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片挚躯。...
    茶點(diǎn)故事閱讀 40,013評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖擦秽,靈堂內(nèi)的尸體忽然破棺而出码荔,到底是詐尸還是另有隱情,我是刑警寧澤感挥,帶...
    沈念sama閱讀 35,731評論 5 346
  • 正文 年R本政府宣布缩搅,位于F島的核電站,受9級特大地震影響触幼,放射性物質(zhì)發(fā)生泄漏硼瓣。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,348評論 3 330
  • 文/蒙蒙 一置谦、第九天 我趴在偏房一處隱蔽的房頂上張望堂鲤。 院中可真熱鬧,春花似錦媒峡、人聲如沸瘟栖。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽半哟。三九已至酬滤,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間寓涨,已是汗流浹背盯串。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留戒良,地道東北人体捏。 一個月前我還...
    沈念sama閱讀 48,203評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像蔬墩,于是被迫代替她去往敵國和親译打。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,960評論 2 355

推薦閱讀更多精彩內(nèi)容