1.函数
- 函数的概念
- 函数就是把特定功能的代码抽取出来,使之成为程序中的一个独立实体
- 函数的作用
- 根据需求,把特定的功能用函数来封装
- 函数的好处
- 1.复用性:可以在一个程序或其他程序中多次重复使用(通过函数名调用)
- 2.高效率:程序剪短清晰,提高可读性
- 3.利于程序维护
2.函数分类:
- 系统函数和内置函数:
- 已经提供好的函数,可以直接使用
- 注意三点:1.作用 2.参数 3.返回值
- 自定义函数:
- 根据需求,对特定函数进行封装
3.函数的定义和调用
- 函数的简单定义:
函数的简单定义
定义函数的语法格式:
function 函数名() {
代码块;
}
注意:
1, 必须使用function关键字, 且为小写, 函数名可以自己给定
2, 函数名的命名规则和变量名一致
3, 函数名后必须写圆括号()
示例: 定义一个函数printOut
function printOut(){
document.write(“Hello World!”);
}
- 函数的调用:
函数的调用方式: 函数名()
如 : 调用下面的函数: printOut();
function printOut(){
document.write(“Hello World!”);
}
注意:
1, 调用函数后会执行函数内部的代码块;
2, 函数在不调用的情况下是不会执行的, 只有调用后函数中的代码才会执行
- 函数的标准定义:
函数的标准定义
定义函数的语法格式:
function 函数名(参数1,参数2,……){
执行语句;
return 返回值;
}
注意:
1, 函数名后圆括号()中的参数数量不定, 也可以没有; (根据功能需要)
2, return关键字的作用是将某个值返回, 如果没有返回值则默认返回undefined;
4.形参和实参
- 形参:
- 形参就是在定义函数时,函数名后面的括号的参数
- 函数的形参跟变量是一样使用,且不能用var修饰
- 是一种形式参数
- 实参:
- 实参就是调用时,函数名称后面的参数
5.函数中的arguments数组
- arguments数组是只能在函数中使用,在函数外面无法使用
- 它是一个伪数组,类似数组
- 可以按照索引存储数据
- 具有length属性
- 不具备数组方法
- 伪数组的原型链中没有数组的原型
- 主要作用:用来动态接受实参
//没有形参
function calc() {
var sum=0;
for(var i=0;i<arguments.length;i++){
sum+=arguments[i];
}
return sum;
}
//实参可以任意数量
console.log(calc(10,2,30));
6.作用域和作用域链
-
作用域:
- 函数和变量起作用的范围,或者说有效范围
-
作用域链:
- 由当前执行上下文中所有嵌套的作用域对象所组成的链式结构
- 在这个执行上下文中,JavaScript引擎会首先在当前作用域中查找变量和函数,如果找不到,就会沿着作用域链向上查找,直到找到该变量或函数为止,或者抵达全局执行上下文的作用域。
- 个人理解:就是在多层嵌套中的函数中该层找不到,就开始往外层找,外层没有,就继续往外层找,直到找到或是到最顶层作用域
-
作用域和作用域链的区别?
- 作用域:函数的作用范围,分为:全局作用域和局部作用域
- 作用域链:访问某个变量的是,优先在当前的函数内部查找,如果内部函数没有就向外部函数查找,如果外部函数没有,就像外出...就开始向全局找,如果全局(window)没有就报错
7.局部变量和全局变量
- 局部变量:
- 定义在函数内部的变量,这个变量只能在函数内部使用,即作用域范围只在函数的内部,形参也是局部变量
- 全局变量:
- 定义在函数外部的变量,这个变量在任何函数中都有效,作用范围为当前文件的任何地方
- 在定义变量时,不写关键字var也是合法的,而且是全局变量,但是这样写不安全,容易在其他地方被更改,尽量使用关键字定义全局变量
//在函数内部,使用var关键字,声明的变量是局部变量 a
//在函数内部,没有使用var关键字的,是全局变量 b,c
// b是全局变量,c是全局变量
function fn() {
var a = b = 100;
c=100;
}
fn();
// console.log(a);
console.log(b,c);