1.ECMAScript中的函数使用function关键字来声明。

eg:

 function sum (num1,num2){
alert(num1+num2);
}
sum(3,7);

注意:

  在有return语句的函数中,函数会在执行完return语句后停止并立即退出。因此,位于return语句之后的任何代码都永远不会执行。

eg:

 function sum (num1,num2){
return num1+num2;
alert("Hello!");//永远不会执行。
}
alert(sum(3,7));

  以上代码执行后,会出现内容为“10”的警告框,但是不会出现内容为“Hello!”的警告框,因为函数内部执行完return语句后就停止结束了,不会执行后面的alert(“Hello!”);语句。

2.严格模式下对函数的一些限制

(1)不能把函数命名为evel或是arguments;

(2)不能把参数命名为evel或是arguments;

(3)不能出现两个命名参数同名的情况。

3.理解参数

(1)ECMAScript中的参数在内部是用一个数组来表示的,函数接收到的始终是这个数组,ECMAScript函数不介意传递进来的参数个数以及参数的数据类型,从这一点可以看出,ECMAScript函数不能实现传统意义上的重载。

重载函数的定义:在相同的声明域中的函数名相同的,而参数表不同的,即通过函数的参数表而唯一标识并且来区分函数的一种特殊的函数。

(2)函数体内可以通过arguments对象访问到参数数组,从而获得传递给函数的每一个参数。

  

  function sum (){
return arguments[0]+arguments[1];
}
alert(sum(3,6));

以上例子说明:

  ECMAScript函数命名的参数只提供便利,但不是必需的。

(3)arguments对象的length属性可以获知有多少个参数传递给了函数。

eg:

 function howManyArgw(){
alert(arguments.length);
}
howManyArgw("hello",45); //
howManyArgw(); //
howManyArgw(12); //

出现三个提示框,依次是:

(4)开发人员可以利用这一点让函数接收任意个参数并分别实现适当的功能。

eg:

  function doAdd(){
if(arguments.length==1){
alert(arguments[0]+10);
}else if(arguments.length==2){
alert(arguments[0]+arguments[1]);
}
}
doAdd(20);
doAdd(21,10);

(5)arguments对象可以与命名参数一起使用:

eg:

  function doAdd( num1,num2){
if(arguments.length==1){
alert(num1+10);
}else if(arguments.length==2){
alert(arguments[0]+num2);
}
}
doAdd(20);
doAdd(21,10);

(6)arguments的值永远与对应命名参数的值保持同步。

eg:

  function add(num1,num2){
arguments[1]=10; //每次执行add函数都会重写第二个参数,将第二个参数的值改为10.
alert(arguments[0]+num2);
}
add(1,2);//本来的值是1+2=3,因为第二个参数的值被改变1+10=11.

注意:

(1)这并不是说着两个值会访问相同的内存空间,它们的内存空间是独立的,但是它们的值会同步。

(2)没有传递值的命名参数将会自动被赋予undefined值。

eg:

 function add(num1,num2){
arguments[1]=10;
alert(arguments[0]+num2);
}
alert(typeof(num2));
add(1);

依次出现的提示框:

(3)ECMAScript中的所有参数传递都是值,不可能通过引用传递参数。

  

JS高程3.基本概念(6)函数的更多相关文章

  1. JS高程3.基本概念(4)操作符

    ECMA-262用于操作数据值的操作符包括: 算术操作符 位操作符 关系操作符 相等操作符 ECMAScript操作符的不同之处在于:它能够适用于很多值,包括字符串,数字值,布尔值,甚至是对象.(在应 ...

  2. JS高程3.基本概念(3)

    1.ECMAScript数值的范围 由于内存的限制,在大多数浏览器中,ECMAScript能够拿保存的数据的范围是 5e-324 ~ 1.7976931348623157e+308,其中最小的数值保存 ...

  3. JS高程3.基本概念(2)

    1.ECMAScript数据类型 5种简单数据类型,分别是: Undefined Null Boolean Number String 1种复杂数据类型: Object (1)typeof操作符--检 ...

  4. JS高程3.基本概念(1)

    1.语法 (1)ECMAScript中的一切(变量,函数名和操作符)都是区分大小写的. (2)标识符 标识符的第一个字符必须是字母,下划线或是美元符号. 其他字符可以是字母,下划线,美元符号和数字. ...

  5. JS高程3.基本概念(5)语句

    1.if语句 2.do-while语句:后测循环语句,循环体内的代码至少执行一次. 3.while语句:前测循环语句. 4.for语句:前测循环语句. 注意:在ECMAScript中不存在块级作用域, ...

  6. js 高程 函数节流 throttle() 分析与优化

    在 js 高程 22.3.3章节 里看到了 函数节流 的概念,觉得给出的代码可以优化,并且概念理解可以清晰些,所以总结如下: 先看 函数节流 的定义,书上原话(斜体表示): 产生原因/适用场景: 浏览 ...

  7. js 高程 22.1.4 函数绑定 bind() 封装分析

    js 高程 书中原话(斜体表示): 22.1.4 函数绑定 另一个日益流行的高级技巧叫做函数绑定.函数绑定要创建一个函数,可以在特定的this 环境中 以指定参数调用另一个函数.该技巧常常和回调函数与 ...

  8. 吃透Javascript数组操作的正确姿势—再读《Js高程》

    Javascript中关于数组对象的操作方法比较多也比较杂,正好再次捡起<Javascript高级程序设计>来读,把它们一一总结梳理了一下: 方法类别 方法名称 方法描述 参数 返回值 备 ...

  9. 《JS高程》创建对象的7种方式(完整版)

    一.理解对象 ECMA-262定义对象:无序属性的集合,其属性可以包含基本值.对象或者属性. 我们可以把 ECMAScript 的对象想象成 散列表:无非就是一组 名值对,其中值可以是数据或函数. 创 ...

随机推荐

  1. 在Thinkphp3.2.3框架下实现自动获取客户端IP地址的get_client_ip()函数

    在Thinkphp框架下使用get_client_ip()函数获取客户端IP地址十分方便: 一行代码便可以实现:$ip = get_client_ip(); 但当我们测试时会遇到后台获取的IP地址显示 ...

  2. 基于redis实现可靠的分布式锁

    什么是锁 今天要谈的是如何在分布式环境下实现一个全局锁,在开始之前先说说非分布式下的锁: 单机 – 单进程程序使用互斥锁mutex,解决多个线程之间的同步问题 单机 – 多进程程序使用信号量sem,解 ...

  3. OpenWebGlobe-开源三维GIS初体验(附源码和演示)

    1.OpenWebGlobe简介 OpenWebGlobe是一个高性能的三维引擎.可应用于可视化仿真,游戏,三维GIS,虚拟现实等领域.它使用纯javascript编写,可以运行在任何支持HTML5. ...

  4. SQL Server中CTE的另一种递归方式-从底层向上递归

        SQL Server中的公共表表达式(Common Table Expression,CTE)提供了一种便利的方式使得我们进行递归查询.所谓递归查询方便对某个表进行不断的递归从而更加容易的获得 ...

  5. ClickOnce部署(3):使用证书

    在讲述证书的使用前,我们先来了解另外一个知识——发布网页. 在前面所说的ClickOnce部署中,如果大家细心的话,应该会发现这么个问题. 如上图,发布成功后,在"输出"窗口中提示 ...

  6. PHP性能测试工具xhprof安装与使用

    原文链接:http://www.orlion.ga/711/ 一.安装 wget https://pecl.php.net/get/xhprof-0.9.4.tgz tar zxf xhprof-0. ...

  7. EntityFramework之你不知道的那些事(七)

    前言 前面一系列几乎都是循序渐进式的进行叙述,似乎脚步走得太快了,于是我开始歇一歇去追寻一些我所不太了解的细枝末节,在此过程中也屡次碰壁,但是唯有如此才能更好的成长,不是吗!希望此文对你亦有帮助. 属 ...

  8. BFC之宽度自适应布局篇

    说到自适应布局,我们曾在“抛砖引玉之宽度自适应布局”一文中学习过.当时的核心思想主要是利用float+margin的形式.利用块状元素的流体特性,然后计算出float元素的宽度,并赋予到块状元素的相应 ...

  9. 使用openfiler设置SMB/CIFS共享总是不通过的一例与解决办法

    最近使用openfiler进行空闲存储的集中化管理与多主机节点共享,等设置到了SMB/CIFS的时候总是通过不了,前提需要开启的LDAP内建在openfiler也都开启并设置好了,但就是无法通过&qu ...

  10. 附录B 安装MySql数据库

    B.1  卸载旧的MaySql程序 第一步   查找以前是否安装有mysql 使用命令查看是否已经安装过mysql: #rpm -qa | grep -i mysql 如果没有结果,则可以进行mysq ...