函数:
参数:
在函数定义与调用时的形参个数与实参个数可以不等。
如果实参个数小于形参个数,则函数体调用执行时,未传递参数为 undefined。
如果实参个数大于形参个数,会忽略多于的参数。
arguments 对象:
用于函数体中,表示函数在调用时接收到的实际参数列表。
可以使用 arguments.length 来获取到实参个数,
使用编号 0 ~ (arguments.length - 1) 来获取到具体的某个参数:
arguments[0]
arguments[1]
求不确定个数的数字之和
实参个数:arguments.length
形参个数:函数名.length
返回值:
return 表达式;
在函数体中,使用 return 最多只能返回一个值。
在函数体中遇到 return 语句,表示结束函数的执行,当前函数体中还有未执行完的代码块,不再执行。
当直接执行 return; 时,表示函数的返回值为 undefined。如果函数中没有显式的调用 return 返回值,相当于函数的返回值也是 undefined。
跳转语句:
break;
continue;
return 表达式;
作用域:
作用范围
全局作用域:
定义在函数外部的变量,拥有全局作用域。意味着这个变量在所有函数中都可以使用到,并且所有函数都是共享这个变量的使用。
生命周期:变量定义到窗口关闭
局部作用域(函数级的作用域--var):
定义在函数内部的变量,拥有局部作用域。在函数外部不能直接调用到函数体内部定义的局部变量。
局部变量可以全局变量同名,函数体中优先使用局部变量。
函数中变量使用时,先在当前函数作用域下查找使用的局部变量,如果有直接使用,没有,再到父级作用域下查询局部变量,如果父级也没有,再到父级的父级继续查找(作用域链),直到找到或是到达全局作用域,如果在全局作用域中仍然找不到,报错。
生命周期:调用进入函数到函数调用结束
块级作用域:
ES3:IIFE(立即调用函数表达式--即匿名自执行函数)
ES6:let/const
let 声明的是块级作用域的变量
const 声明的是块级作用域的常量
生命周期:进入块到退出块
声明提升(预解析)
先将 var 、function 所定义的变量、函数声明部分提升到对应作用域的最顶部。
对于函数,声明的方式定义函数时,会将函数整体向作用域顶部提升,如果是函数表达式的书写方式,只提升变量声明部分,函数主体不提升。