函数的意义:可以封装任意多条语句,而且可以在任何地方任何时候调用执行

ECMAScript中说函数定义时候不必执行是否返回值;

实际任何函数在任何时候都可以通过return语句后跟要返回的值来实现返回值;

如果没有return,则返回undefined;

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

return也可以不带返回值;这时候函数在停止执行后将返回undefined;(这种情况是终止函数的意思,一般用在需要提前停止函数执行而又不需要返回值的情况下;

严格模式下对函数有一些限制

1、不能把函数命名为eval或arguments;

2、不能把参数命名为eval或arguments;

3、不能出现两个命名参数同名的情况;

参数的理解

ECMAScript中函数可以传递任意多个参数,也不在乎传进来的参数是什么数据类型的;

即时定义函数时候,设置接收了2个参数;但是运行的时候也可以传递1个或者三个,甚至不传递参数;没有传递值的命名参数会自动赋予undefined;

可以利用这里点让函数能够接受任意个参数并分别实现适当的功能;(例如获取和设置样式就是通过这个原理写的;当传递两个参数的时候,是获取样式的值;当传递三个参数,是设置样式;)

函数中参数调取原理:参数在内部是用一个数组来表示的,函数接收到的始终是这个数组;arguments对象知识一个类数组(因为它并不是Array的实例),可以通过arguments[0],arguments[1],length来获取数据(有length);

命名的参数只提供便利,并不是必须的;可以用arguments[0]来获取;当然arguments也可以与命名参数一起使用的;

严格模式下,重写arguments的值会导致语法错误;

ECMAScript中的所有参数传递的都是值,不可能通过引用来传递参数;

没有重载

ECMAScript函数没有签名;因为其参数是由包含零或多个值的数组来表示的;而没有签名,真正的重载是不可能做到的;如果定义多个相同名字的函数,则该名字只属于后定义的函数;

function test(num){
return num+100
}
function test(num
){
return num+200
}
var testValue=test(500
);
console.log(testValue);
//700;

可以通过判断参数的类型和数量做不同的反应;

function test(num){
if(num>=200){
return num+" 是一个大于等于200的数"
}else{
return num+" 是一个小于200的数"
}
}
var testValue1=test(500
);
var testValue2=test(100
);
console.log(testValue1);//500
是一个大于等于200的数;
console.log(testValue2);//100
是一个小于200的数;

~

小结

  • ECMAScript中的基本数据类型包括undefined,null、string、boolean、number;
  • 与其它语言不同,ESMAScript没有为整数和浮点数分别定义不同的数据类型,都是用number来表示所有
  • ECMAScript还有引用数据类型;EC5和6是object;一般是分为function和Object;
  • 严格模式为JS容易出错的地方进行了限制,但这并没有什么软用,因为我没有用过严格模式做项目,我不知道用了之后能解决什么问题; – -、
  • ECMAScript提供了和C类型语言中相同的基本操作符,包括算数操作符,布尔操作,关系操作,相等及赋值操作;
  • 从其它语言中借鉴了很多流控制语句;例如if、for、weitch等;但是函数与其它语言的函数有有不同;
  • 函数无需指定返回值,函数可以在任何时候返回任何值;
  • 当没有返回值的时候,函数会返回一个特殊的undefined表示没有找到返回值;
  • 没有函数签名的概念,因为函数参数是以类似数组的形式传递的;
  • 由于不存在函数签名的特性,函数不能重载;但是可以通过判断变量的类型或数量来做出不同的反应,模仿方法的重载;
  • 可以向函数中船体任意数量的参数,并且可以通过arguments对象来访问这些参数;

~~~~~~~