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

eg:

  1. function sum (num1,num2){
  2. alert(num1+num2);
  3. }
  4. sum(3,7);

注意:

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

eg:

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

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

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

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

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

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

3.理解参数

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

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

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

  

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

以上例子说明:

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

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

eg:

  1. function howManyArgw(){
  2. alert(arguments.length);
  3. }
  4. howManyArgw("hello",45); //
  5. howManyArgw(); //
  6. howManyArgw(12); //

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

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

eg:

  1. function doAdd(){
  2. if(arguments.length==1){
  3. alert(arguments[0]+10);
  4. }else if(arguments.length==2){
  5. alert(arguments[0]+arguments[1]);
  6. }
  7. }
  8. doAdd(20);
  9. doAdd(21,10);

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

eg:

  1. function doAdd( num1,num2){
  2. if(arguments.length==1){
  3. alert(num1+10);
  4. }else if(arguments.length==2){
  5. alert(arguments[0]+num2);
  6. }
  7. }
  8. doAdd(20);
  9. doAdd(21,10);

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

eg:

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

注意:

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

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

eg:

  1. function add(num1,num2){
  2. arguments[1]=10;
  3. alert(arguments[0]+num2);
  4. }
  5. alert(typeof(num2));
  6. 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. Tensorflow一些常用基本概念与函数(三)

    摘要:本系列主要对tf的一些常用概念与方法进行描述.本文主要针对tensorflow的数据IO.图的运行等相关函数进行讲解.为‘Tensorflow一些常用基本概念与函数’系列之三. 1.序言 本文所 ...

  7. Tensorflow一些常用基本概念与函数(四)

    摘要:本系列主要对tf的一些常用概念与方法进行描述.本文主要针对tensorflow的模型训练Training与测试Testing等相关函数进行讲解.为‘Tensorflow一些常用基本概念与函数’系 ...

  8. JS高程3.基本概念(6)函数

    1.ECMAScript中的函数使用function关键字来声明. eg: function sum (num1,num2){ alert(num1+num2); } sum(3,7); 注意: 在有 ...

  9. JS_高程7.函数表达式(2)递归

    递归函数:一个函数通过名字调用自身的情况构成的.eg: //递归实现阶乘 function factorial(num){ if(num <= 1){ return 1; }else{ retu ...

随机推荐

  1. mycat配置文件备份

    schema.xml <?xml version="1.0"?> <!DOCTYPE mycat:schema SYSTEM "schema.dtd&q ...

  2. uva 1232

    题意: 建筑物在多长的部分是最高的成为该建筑物的覆盖度.求所有建筑物的覆盖度之和. 链接: https://vjudge.net/contest/202699#problem/E 题解: 这道题还是挺 ...

  3. python多线程之t.setDaemon(True) 和 t.join()

    0.目录 1.参考2.结论    (1)通过 t.setDaemon(True) 将子线程设置为守护进程(默认False),主线程代码执行完毕后,python程序退出,无需理会守护子线程的状态.    ...

  4. JS浮点计算精度问题分析与解决

    问题描述 在JS计算四则运算时会遇到精度丢失的问题,会引起诸多问题,看看以下例子: 例如:在chrome控制台输入 0.1 + 0.7 输出结果是 0.7999999999999999 例如:0.1+ ...

  5. 【Android】详解Android动画之Interpolator插入器

    Interpolator英文意思是: 篡改者; 分类机; 校对机 SDK对Interpolator的描述是:An interpolator defines the rate of change of ...

  6. github的pull request是指什么意思

    有一个仓库,叫Repo A.你如果要往里贡献代码,首先要Fork这个Repo,于是在你的Github账号下有了一个Repo A2,.然后你在这个A2下工作,Commit,push等.然后你希望原始仓库 ...

  7. vsftp 基于虚拟用户的ftp服务器 如何做配额

    做配额的方法: 1,是用磁盘配额,但是虚拟用户好像没有好办法.只能应用于本地用户.与Vsftpd设置无关 2,文件夹限制大小,是占用的.这和Vsftpd没有关系 所以可以先把用户禁锢在自己工作目录里面 ...

  8. Codeforces 348D Turtles LGV

    Turtles 利用LGV转换成求行列式值. #include<bits/stdc++.h> #define LL long long #define fi first #define s ...

  9. Maya cmds pymel 快速选择hard edges(硬边)

    Maya cmds pymel 快速选择hard edges(硬边) import maya.cmds as cmds cmds.polySelectConstraint(m = 3, t = 0x8 ...

  10. HDU 2426 Interesting Housing Problem (最大权完美匹配)【KM】

    <题目链接> 题目大意: 学校里有n个学生和m个公寓房间,每个学生对一些房间有一些打分,如果分数为正,说明学生喜欢这个房间,若为0,对这个房间保持中立,若为负,则不喜欢这个房间.学生不会住 ...