JavaScript函数的参数传递

导读

  • chrome调式工具
  • 函数"对象"
  • add(2)(3)(4)固定参数个数的实现
  • add(2)(3)(4)...(任意参数个数)的实现(函数柯里化)
  • 扩展:参数传递方式

1.chrome调式工具

为了方便JavaScript的调试,简单介绍chrome调试工具。

1.打开chrome浏览器,F12打开开发者工具,选择sources,打开需要调试的文件。

  1. 断点设置:在代码左侧通过点击设置断点,程序执行到此处时自动停止。


    断点设置

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

你可能感兴趣的:(JavaScript函数的参数传递)