导读
- chrome调式工具
- 函数"对象"
- add(2)(3)(4)固定参数个数的实现
- add(2)(3)(4)...(任意参数个数)的实现(函数柯里化)
- 扩展:参数传递方式
1.chrome调式工具
为了方便JavaScript的调试,简单介绍chrome调试工具。
1.打开chrome浏览器,F12打开开发者工具,选择sources,打开需要调试的文件。
-
断点设置:在代码左侧通过点击设置断点,程序执行到此处时自动停止。
3.变量监测:在图示框中可以在代码执行过程中监测变量的值。
2.函数“对象”
这里的变量加了引号,是为了将函数与变量做一个对比,从而便于理解。函数可以看成一个function类型的对象。
var a=function b(){
console.log(b); //打印整个函数
console.log(typeof b); //打印function
return 0;
}
console.log(a()); //打印0
console.log(a); //打印整个函数
console.log(b); //这句话报错,因为不存在b变量
console.log(typeof a); //打印function
console.log(typeof b); //打印undefined
function c(){
return 0;
}
console.log(c()); //打印0
console.log(c); //打印整个函数
console.log(typeof c); //打印function
当函数变量作为返回值时:
var sum=0;
function add(x)
{
sum+=x;
return add;
}
var a=add(2)(3); //sum=5 a是函数对象
var b=a(4); //sum=9 b是函数对象
console.log(a); //打印整个函数
console.log(b); //打印整个函数
3.add(2)(3)(4)固定参数个数的实现
- 采用全局变量的形式
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);
- 采用单个函数的形式
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)...(任意参数个数)的实现(函数柯里化)
- 采用全局变量的形式
var sum=0;
function add(x)
{
sum+=x;
return add;
}
var a=add(2)(3); //sum=5
a(4) //sum=9
- 采用单个函数的形式
引入概念:当执行console.log(<函数对象>)
来打印整个函数时,是调用的<函数对象>.toString()
方法返回最后的打印结果字符串。可以通过重写<函数对象>.toString()
方法来实现我们想要的打印值。
function a(){
return 1;
}
console.log(typeof a); //打印function
console.log(a); //打印整个函数
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)...的实现:
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); //此处才会调用toString方法
5.扩展:参数传递方式
- 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
- 函数的参数传递方式
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
- 函数类型
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