- 一个函数是实现某一个功能的,实现了没有怎么判断?计算1-100之间所有数字的和。
var sum (){
for(var i=1;i<101;i++){
sum+=1;
}
}
sum();
函数执行完成之后,内部的结果想要告诉函数的调用者。那么就要使用函数值,函数的 返回值只能有一个。
语法是在所有的函数内部的语句之后添加一条return语句。
想要返回什么就在reurn后面写什么。
任何调用这个函数的地方都可以会去到这个返回值。
-
函数申明的优先级
如果一个表达式申明的函数与一个是哟个function关键字申明的函数具有相同的调用 方式。那么最终生效的永远是表达式申明的函数,也就是说表达式申明的函数优先级高。 -
不要在if以及所有判断里面申明函数。
-
函数的属性以及方法
面向对象。函数也是一个对象。对象就是具有方法以及属性的一个个体。
name属性:函数名。
length属性:形参参数的个数。
toString():函数字符串自己。
this :表示函数的调用者 -
参数
参数的默认值。有的参数并不是必须要传递的,没有传递时候可以设置一个默认的来执 行。这个时候就可以使用默认值语法。一般来说函数的在调用的时候传递的参数的个数 要和函数申明的时候申明的参数的个数要一直。如果某一个参数没有传递,那么实参与 形参的对应关系式从前向后的参数总是被先省略。 -
参数的传递方式
值传递:
var a = 10;
b = a
b = 11;
a = ? 10
对于简单数据类型的参数传递使用的就是值传递。(数字,字符串,布尔值)。
var a = 100;
function s(m){
console.log(m);
console.log(a);
m = 0;
console.log(m);
console.log(a);
}
s(a);
console.log(a);
console.log(m);
引用传递(地址传递):
var zhangsan = {};//对象
zhangsan.age = 18;
zhangsan.height = 178;
zhangsan.weight = 180;
function s(b){
b.age = 22;
}
s(zhangsan);
console.log(zhangsan.age);
- arguments对象:
参数对象,能够在函数的内部获取到所有传入的参数的集合。是一个类数组对象。
出现原因: - 如果传入的参数的个数不确定的。例如返回换入n个参数的最大值。
- 申明函数的时候参数的个数比调用函数的时候传染源的参数个数少。
- 函数分类
系统函数,js自己定义好的函数
自定义函数,用户自己定义的函数。
匿名函数:没有名称的函数,这个函数只是定义的时候直接生效。
立即函数(自执行函数):就是函数在定义的是时候自动调用一次。不能使用在函数关 键字申明的函数后面直接加上小括号不代表执行,因为JS的解析器认为function开始 的语句就是函数定义。
表达式申明:可以使用表达式申明的函数后面加上小括号表示执行。
其实对于js解析器来说只要不是function开始都可以实现自执行。
(function s (){}());
(function (){})();
利用上面的这个自执行的特点,可以实现用户的一个局部作用域空间,这样可以防止变 量的污染。
其实对JS解析器来说只要不是使用function开始申明的函数都是可以加上小括号表示 自执行的。
!function s (){}();
~function(){}();
+function(){}();
-function(){}();
-
回调函数
就是在某一个地方(函数内部)根据有一个条件去调用其他函数。
在不修改源代码的基础上事件新的功能。
对修改封闭,对扩展开放。开放封闭原则。 -
递归函数
在函数的内部自己调用自己实现某一个操作。递归函数是一定具有结束条件的,没有结 束条件就变成了死循环。
网友评论