functionName(parameter1, parameter2, parameter3) {
// 要执行的代码……
}

参数规则

JavaScript 函数定义时形参没有指定数据类型。

JavaScript 函数不会对实参的类型进行检测。

JavaScript 函数不会对实参的个数进行检测。

默认参数

如果调用函数时未传入足够多的实参,未提供的参数会被默认设置为: undefined.

所以我们最好为参数设置一个默认值。

function myFunction(x, y) {
console.log(x);
console.log(y);
console.log(typeof y);
y = y || 1; //为 y 参数设置默认值
console.log(y);
}
myFunction(2);

如果传入了 y 参数,y = y || 1 会返回 y;如果没有传入 y 参数,y = y || 1 会返回我们设置的默认值 1,因为 undefined 为 false.

JS不同于其他语言,方便起见它通过第一个值求  “||”,第一个值为“true”,则返回第一个值;第一个值为“false”,则返回第二个值。

Arguments 对象

如果调用函数时传入了过多的实参,参数将无法被引用,因为无法找到对应的参数名。 只能使用 arguments 对象来调用实参。

JavaScript 函数有个内置的对象 arguments 对象。argument 对象包含了调用函数时传入的参数数组,它是一个类数组对象。

我们可以通过 arguments 对象的属性和方法让函数实现很多特殊的功能。

1、js不检测实参的个数,但是我们可以用 argument 对象的 length 属性检测实参的个数。

function add() {
if( arguments.length == 2 ){
return arguments[0] + arguments[1];
}else{
return '传入的参数不合法';
}
} console.log( add(2,3) );
console.log( add(1,2,3) );

2、重载函数。

js是一种弱类型的语言,没有重载机制,当我们重写函数时,会将原来的函数直接覆盖掉。

但是我们可以通过 arguments 对象判断传入实参的类型与数量,进行不同的操作,然后返回不同的数值,以实现重载。

function sumAll() {
var i, sum = 0;
for (i = 0; i < arguments.length; i++) {
sum += arguments[i];
}
return sum;
} console.log( sumAll(1,2,3,4,5) ); //
console.log( sumAll(1,3,5,7,9,11,13) ); //

3、定义一个函数来连接字符串。

你可以传递任意数量的参数到该函数,第一个参数指定一个字符作为衔接点来连接字符串。

function myConcat(separator) {
var args = Array.prototype.slice.call(arguments, 1);  //从第二个参数开始将参数列表转换成参数数组
return args.join(separator);
} var x = myConcat(", ", "red", "orange", "blue"); //"red, orange, blue"
var y = myConcat("; ", "elephant", "giraffe", "lion", "cheetah"); //"elephant; giraffe; lion; cheetah"
console.log(x);
console.log(y);

附:转成数组的通用函数(可以将 arguments 对象转换成数组)

var toArray = function(s){
try{
return Array.prototype.slice.call(s);
} catch(e){
var arr = [];
for(var i = 0,len = s.length; i < len; i++){
//arr.push(s[i]);
arr[i] = s[i]; //据说这样比push快
}
return arr;
}
}

参考:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Functions/arguments

JavaScript 中函数的参数的更多相关文章

  1. JavaScript中函数作为另一个函数的参数的时候它存在于哪个作用域

    一直对函数作为参数被传递进另外一个函数理解的不是很清除.先看下这段代码吧: function test(fn){ var bar = 1; fn(); } var bar = 99; test(fun ...

  2. 如何理解javaSript中函数的参数是按值传递

    本文是我基于红宝书<Javascript高级程序设计>中的第四章,4.1.3传递参数小节P70,进一步理解javaSript中函数的参数,当传递的参数是对象时的传递方式. (结合资料的个人 ...

  3. Javascript中函数的四种调用方式

    一.Javascript中函数的几个基本知识点: 1.函数的名字只是一个指向函数的指针,所以即使在不同的执行环境,即不同对象调用这个函数,这个函数指向的仍然是同一个函数. 2.函数中有两个特殊的内部属 ...

  4. JavaScript中函数的形参和实参的实现原理剖析

    我们都知道JS里面参数的传递是可以不一样的,比如我们有一个函数: <script type="text/javascript"> function one(a,b,c) ...

  5. JavaScript中函数的调用

    JavaScript中函数的调用 制作人:全心全意 在JavaScript中,函数定义后并不会自动执行,要执行一个函数需要在特定的位置调用该函数,调用函数需要创建调用语句,调用语句包含函数名称和参数. ...

  6. JavaScript中函数的定义

    JavaScript中函数的定义 制作人:全心全意 在JavaScript中,函数是由关键字function.函数名加一组参数以及置于大括号中需要执行的一段代码定义的.定义函数的基本语法格式如下: f ...

  7. javascript中函数声明、变量声明以及变量赋值之间的关系与影响

    javascript中函数声明.变量声明以及变量赋值之间的关系与影响 函数声明.变量声明以及变量赋值之间有以下几点共识: 1.所有的全局变量都是window的属性 2.函数声明被提升到范围作用域的顶端 ...

  8. 改变JavaScript中函数的内部this指向!

    改变JavaScript中函数的内部this指向! 第一种方法 call call 可以 调用函数 + 改变函数内的this指向! var obj = { name: 'lvhang' } funct ...

  9. JavaScript中函数的调用!

    JavaScript中函数的调用! 1 普通函数 // 1 普通函数 function fn() { console.log(123); } // 函数名 + 一个小括号! 或者 函数名.call() ...

随机推荐

  1. Lombok安装和使用

    前言 Lombok是一个开源项目,其使用简单的注解的形式来帮助我们简化消除一些必须有但显得很臃肿的 java 代码,特别是对于POJO. Lombok的官网:https://projectlombok ...

  2. xcode Aborting commit: '~/Pods' remains in tree-conflict 错误的解决办法

    在网上找了很多, 最后找到一个比较简单有较的 filename: 是出错的文件的绝对路径: xcode会提示 然后开终端: 1:svn remove --force filename 2:svn re ...

  3. 【题解】洛谷P1080 [NOIP2012TG] 国王游戏(贪心+高精度)

    次元传送门::洛谷P1080 思路 我们模拟一下只有两个大臣的时候发现 当a1​∗b1​<a2​∗b2​是ans1<ans2 所以我们对所有大臣关于左右手之积进行排序 得到最多钱的大臣就是 ...

  4. Token生成(转载)

    package main import ( "encoding/base64" "encoding/json" "log" "ne ...

  5. 获取 iOS APP 内存占用的大小

    当我们想去获取 iOS 应用的占用内存时,通常我们能找到的方法是这样的,用 resident_size:   #import <mach/mach.h> - (int64_t)memory ...

  6. Ubuntu下VsCode+CMake 交叉编译

    在安装配置好VsCode后,下载相关插件.如图: 其中CMake Tools是为了方便使用CMake的扩展工具. 在创建工程前,先在VSCode打开一个空的目录(你的Project目录),再对CMak ...

  7. C++笔记020:const 和 #define 的对比

      原创笔记,转载请注明出处! 点击[关注],关注也是一种美德~ 第一,const与#define的相同点 C++中的const常量类似于宏定义 const  int  c = 5  ≍  #defi ...

  8. activeMQ的request-response请求响应模式

    一:为什么需要请求响应模式 在消息中间中,生产者只负责生产消息,而消费者只负责消费消息,两者并无直接的关联.但是如果生产者想要知道消费者有没有消费完,或者用不用重新发送的时候,这时就要用到请求响应模式 ...

  9. 课时26.a标签其它属性(掌握)

    4.a标签的href属性除了可以指定一个网络地址以外,还可以指定一个本地地址 a标签中还有一个属性,叫做title,a标签中的title和img标签中的title一样,都是用来控制鼠标悬停时显示的提示 ...

  10. Field Security Profile Helper

    using System; using Microsoft.Xrm.Sdk; using Microsoft.Xrm.Sdk.Messages; /// <summary> /// 安全字 ...