函數(shù)的創(chuàng)建方式
(1)函數(shù)聲明 function 函數(shù)名 (形式參數(shù)){函數(shù)體}
(2)函數(shù)表達(dá)式
A:匿名函數(shù)表達(dá)式
B: 命名函數(shù)表達(dá)式
(3)function構(gòu)造函數(shù)來創(chuàng)建函數(shù)
創(chuàng)建函數(shù)的參數(shù)和函數(shù)體var fn=Function(){‘形參1’,‘形參2’,‘函數(shù)體’}
多個(gè)參數(shù)情況下,最后一個(gè)參數(shù)為函數(shù)體。
如果只有一個(gè)參數(shù),這一個(gè)參數(shù)就是函數(shù)體,
如果沒有參數(shù),函數(shù)為空函數(shù)。
anonymous()匿名函數(shù)???
函數(shù)傳遞參數(shù)需要包裝為字符串來傳參
函數(shù)的原型鏈
函數(shù)與原型關(guān)系
原型對(duì)象是否在原型鏈
Function instanceof Function
Object instanceof Object
Object instanceof Function
函數(shù)的特殊點(diǎn):
(1)函數(shù)可以動(dòng)態(tài)創(chuàng)建
(2)函數(shù)可以賦值給變量,可以被擴(kuò)展、刪除(作為對(duì)象的方法時(shí)刪除)
(3)函數(shù)可以作為其他函數(shù)的參數(shù)(函數(shù)回調(diào))和返回值
函數(shù)最為返回值:
var cont=(function f(){
var x=0;
return function (){
x++;
return x;
}
})();
console.log(cont());
console.log(cont());
console.log(cont());

(4)函數(shù)可以擁有自己的屬性和方法
(5)JS中沒有塊級(jí)作用域,
(7)函數(shù)式第一型的對(duì)象(對(duì)象擁有的都擁有):可以做參數(shù);可以賦值給變量,可以當(dāng)返回值
(8)函數(shù)擁有name屬性,用log打印是函數(shù)的函數(shù)名。
注意點(diǎn):如果作為參數(shù)的函數(shù)是對(duì)象的方法,那么在函數(shù)調(diào)用的時(shí)候,(會(huì)把實(shí)參的值賦值給形參)在這個(gè)過程中,函數(shù)的調(diào)用方式發(fā)生了改變,所以需要注意this的指向。
解決辦法:綁定函數(shù)內(nèi)部的this,指向正確的對(duì)象。
示例代碼:
function f(callb,callobj){
//綁定caab方法中的this、讓this總是指向原來的對(duì)象。
callb.call(callobj)
};
var obj={
name:'css',
show:function(){
console.log(this.name);
}
}
f(obj.show,obj)
回調(diào)函數(shù):
function f(call){
call();
}
function demo(){
console.log('demo');
}
f(demo);
惰性函數(shù):函數(shù)的實(shí)際內(nèi)容在調(diào)用了一次后才會(huì)被確定,第一調(diào)用時(shí)初始化,重新定義函數(shù)。
function foo(){
console.log('foo');
foo=function(){
console.log('foo,foo');
}
}
foo();//第一次舒適化操作。
foo();//第二次調(diào)用會(huì)覆蓋之前定義的函數(shù)
補(bǔ)充: