一:函数的定义
函数:可以实现某种特定功能的代码块。
定义函数:
function 函数名([参数])
{
函数体语句
}
注意:用[ ]括起来的内容可以有,也可以没有。
-
function是一个关键字,全部小写。
-
函数名:是一个标识符,建议使用驼峰命名。
-
函数可以有参数也可以没有参数,可以有多个参数,若有多个参数,参数之间用逗号分隔
-
"
{}
"表示函数的控制范围,不能省略。
-
内聚:模块内部结合的紧密程度
-
耦合:模块之间结合的紧密程度
函数期望做到高内聚低耦合
二、函数的参数
-
形参(形式参数):在定义函数时出现在函数首部的参数,在定义函数时形参只是占位符,没有确定的值。
-
实参(实在参数):函数调用时出现在函数首部的参数,是实际的值。
-
参数的传递方式:实参将数据单向传递给形参。
-
当形参的个数比实参的个数多时,函数不会报错,多出的形参会是undefined类型。
-
当实参的个数比形参的个数多时,多余的实参会被忽略。
-
实参向形参传递数据是单向的,形参的改变不会影响到实参。
三、回调函数
将一个函数A作为参数传递给函数B,在函数B内对函数A进行调用,函数A就是回调函数。
function fun(a,b){
return a+b;
}
function cal(m,n,fun){
return fun(m,n)
}
四、递归函数
函数自己调用自己.
(1) 递归的使用前提
A、问题可以分解(即复杂的问题逐步分解成简单的问题)
B、分解得到的新问题的解法和原来老问题的解法是相同的
C、必须有明确的终止条件
(2) 递归过程
A、自上而下分解问题
B、自下而上回溯得到问题的解
五、变量的作用域
(1) 全局变量:在函数外部定义的变量(显式定义)或在函数内部不用var定义的变量(隐式定义)在浏览器页面关闭后才会销毁,比较占空间。
(2) 局部变量:在函数体内部利用var关键字定义的变量。在函数调用结束后就销毁,比较节省内存资源。
(3) 块级变量:ES6中使用let关键字在语句块中定义的变量。当语句块结束后就销毁。
六、对this的理解
第一准则: this 永远指向函数 运行时 所在的对象,而不是函数被创建时所在的对象(不包含箭头函数)。
this的集中指向
- window对象,如:
console.log(this)
- 函数中的this,谁调用函数,函数中的this就指向谁,一般指向window如:
function foo() {
console.log(this);
}
foo();
- 对象中的this,一般指向对象。如:
var obj = { name: "jack",
run: function() {
console.log(this.name+"run"); } }
obj.run();
- 构造函数中的this,指向实例化出来的对象 :
function Person(name) {
this.name = name;
// this 指向当前实例化的对象。
}