函數(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)用 Array 的 map() 方法见坑,傳入自定義函數(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再排序