JavaScript:函数参数

参数概念

函数运行的时候,有时需要提供外部数据,不同的外部数据会得到不同的结果,这种外部数据就叫参数。

参数可以分为:

  • 形参:在定义函数时,声明的参数变量仅在函数内部可见。
  • 实参:在调用函数时,实际传入的值。

示例
定义 JavaScript 函数时,可以设置零个或多个参数。

function f(a, b) {
       //设置形参a和b
    return a + b;
}

var x = 1, y = 2;  //声明并初始化变量
console.log(f(x,y));  //调用函数并传递实参

在上面示例中,a、b 就是形参,而在调用函数时向函数传递的变量 x、y 就是实参。

参数规则

  • 函数定义时形式参数没有指定数据类型。
  • 函数对实际参数没有进行类型检测。
  • 函数对实际参数的个数没有进行检测。

默认参数

如果函数在调用时未提供实际参数,参数会默认设置为: undefined

<script>
function myFunction(x, y) {
      
    y = y || 0;
    return x * y;
}
document.getElementById("demo").innerHTML = myFunction(4);
script>
  • 如果y已经定义 , y || 返回 y, 因为 y 是 true, 否则返回 0, 因为 undefined 为 false。

参数传递

javascript 中所有函数的参数都是按值传递的。也就是说,把函数外部的值复制到函数内部的参数,就和把值从一个变量复制到另一个变量一样。

  • 基本类型值
    在向参数传递基本类型的值时,被传递的值会被复制给一个局部变量(命名参数或arguments对象的一个元素)
function addTen(num){
     
    num += 10;
    return num;
}
var count = 20;
var result = addTen(count);
console.log(count);//20,没有变化
console.log(result);//30
  • 引用类型值
    在向参数传递引用类型的值时,会把这个值在内存中的地址复制给一个局部变量,因此这个局部变量的变化会反映在函数的外部
function setName(obj){
     
    obj.name = 'test';
}
var person = new Object();
setName(person);
console.log(person.name);//'test'

当在函数内部重写引用类型的形参时,这个变量引用的就是一个局部对象了。而这个局部对象会在函数执行完毕后立即被销毁

function setName(obj){
     
    obj.name = 'test';
    console.log(person.name);//'test'
    obj = new Object();
    obj.name = 'white';
    console.log(person.name);//'test'
}
var person = new Object();
setName(person);

你可能感兴趣的:(javascript)