導(dǎo)讀
- chrome調(diào)式工具
- 函數(shù)"對(duì)象"
- add(2)(3)(4)固定參數(shù)個(gè)數(shù)的實(shí)現(xiàn)
- add(2)(3)(4)...(任意參數(shù)個(gè)數(shù))的實(shí)現(xiàn)(函數(shù)柯里化)
- 擴(kuò)展:參數(shù)傳遞方式
1.chrome調(diào)式工具
為了方便JavaScript的調(diào)試,簡(jiǎn)單介紹chrome調(diào)試工具。
1.打開chrome瀏覽器,F(xiàn)12打開開發(fā)者工具,選擇sources,打開需要調(diào)試的文件。
-
斷點(diǎn)設(shè)置:在代碼左側(cè)通過點(diǎn)擊設(shè)置斷點(diǎn),程序執(zhí)行到此處時(shí)自動(dòng)停止。
斷點(diǎn)設(shè)置
3.變量監(jiān)測(cè):在圖示框中可以在代碼執(zhí)行過程中監(jiān)測(cè)變量的值。

變量監(jiān)測(cè)
2.函數(shù)“對(duì)象”
這里的變量加了引號(hào),是為了將函數(shù)與變量做一個(gè)對(duì)比,從而便于理解。函數(shù)可以看成一個(gè)function類型的對(duì)象。
var a=function b(){
console.log(b); //打印整個(gè)函數(shù)
console.log(typeof b); //打印function
return 0;
}
console.log(a()); //打印0
console.log(a); //打印整個(gè)函數(shù)
console.log(b); //這句話報(bào)錯(cuò),因?yàn)椴淮嬖赽變量
console.log(typeof a); //打印function
console.log(typeof b); //打印undefined
function c(){
return 0;
}
console.log(c()); //打印0
console.log(c); //打印整個(gè)函數(shù)
console.log(typeof c); //打印function
當(dāng)函數(shù)變量作為返回值時(shí):
var sum=0;
function add(x)
{
sum+=x;
return add;
}
var a=add(2)(3); //sum=5 a是函數(shù)對(duì)象
var b=a(4); //sum=9 b是函數(shù)對(duì)象
console.log(a); //打印整個(gè)函數(shù)
console.log(b); //打印整個(gè)函數(shù)
3.add(2)(3)(4)固定參數(shù)個(gè)數(shù)的實(shí)現(xiàn)
- 采用全局變量的形式
var a1,a2,a3;
function fn3(x){
a1=x;
return fn4;
}
function fn4(x){
a2=x;
return fn5;
}
function fn5(x){
a3=x;
return a1+a2+a3;
}
var b=fn3(2)(3)(4);
console.log(b);
- 采用單個(gè)函數(shù)的形式
function fn(a1){
var fn1=function(a2){
var fn2=function(a3){
return a1+a2+a3;
}
return fn2;
}
return fn1;
}
var a=fn(2)(3)(4);
console.log(a);
4.add(2)(3)(4)...(任意參數(shù)個(gè)數(shù))的實(shí)現(xiàn)(函數(shù)柯里化)
- 采用全局變量的形式
var sum=0;
function add(x)
{
sum+=x;
return add;
}
var a=add(2)(3); //sum=5
a(4) //sum=9
- 采用單個(gè)函數(shù)的形式
引入概念:當(dāng)執(zhí)行console.log(<函數(shù)對(duì)象>)來打印整個(gè)函數(shù)時(shí),是調(diào)用的<函數(shù)對(duì)象>.toString()方法返回最后的打印結(jié)果字符串??梢酝ㄟ^重寫<函數(shù)對(duì)象>.toString()方法來實(shí)現(xiàn)我們想要的打印值。
function a(){
return 1;
}
console.log(typeof a); //打印function
console.log(a); //打印整個(gè)函數(shù)
console.log(a()); //打印1
a.toString=function(){
return "重寫toString";
}
console.log(typeof a); //打印function
console.log(a); //打印"重寫toString"
console.log(a()); //打印1
add(2)(3)(4)...的實(shí)現(xiàn):
function add(x)
{
var res=0;
res+=x;
function sum(y){
res+=y;
return sum;
}
sum.toString= function(){return res;}
return sum;
}
var a=add(2)(3)(4);
console.log(a); //此處才會(huì)調(diào)用toString方法
5.擴(kuò)展:參數(shù)傳遞方式
- object類型的概念:
var a={name:"Name"};
b=a;
console.log(a); //Name
console.log(b); //Name
a.name="NewName"
console.log(a); // NewName
console.log(b); //NewName

程序示例
- 函數(shù)的參數(shù)傳遞方式
function changeName(obj){
obj.name="GoodName"
obj={name:"BadName"}
return obj;
}
var a={name:"Name"};
var b;
b=changeName(a);
console.log(a); //GoodName
console.log(b); //BadName

程序示例
- 函數(shù)類型
function a(){
}
a.n=function(){
return "Name";
}
var b=a;
console.log(a.n()); //Name
console.log(b.n()); //Name
console.log(typeof a); //function
console.log(typeof b);//function
a.n=function(){
return "NewName";
}
console.log(a.n()); //NewName
console.log(b.n()); //NewName
