函数的参数
形参
行参就是写在定义函数的时候括号里面,相当于在函数内部写了一个变量
实参
实参就是在调用函数的时候传递参数,就是给形参赋值
实参给形参赋值的时候,要一一对应赋值
参数个数的关系
【1】形参和实参个数相等的时候,一一对应
【2】当形参的个数 比实参的个数多的时候,多出来的形参的值为 undefined
【3】当实参的个数 比形参的个数多的时候,多出来的实参没有形参变量去接收
案例
function fun(a, b, c) {
console.log(a, b, c);
}
fun(10, 20, 30, 40);//10 20 30
fun(10, 20);//10 20 undefined
作用域
什么是作用域
一段程序代码中所用到的名字不总是有效和可用的,而限定这个名字的可用性的代码范围就是这个名字的作用域
JS作用域: 就是代码(变量)作用的范围
作用域 - 决定了变量的可访问性(可见性)
全局作用域
直接编写在 script 标签里的JS代码,都是全局作用域
一个单独的 JS 文件里的
在全局作用域中:
- 所有创建的变量都会作为 window 对象的属性保存。
var a = 10;
console.log(window.a);
//10
- 所有创建的函数都会作为 window 对象的方法保存。
function fun() {
console.log('这是个函数');
}
window.fun();
//这是个函数
局部作用域
一个函数属于一个局部作用域
在函数内部就是局部作用域,这个代码的名字只在函数的内部起作用
在JS中,根据作用域的不同.变量分为全局变量和局部变量
全局变量
在全局作用域里定义的变量.
在局部中,没有使用var关键字声明的变量,也属于全局变量.
全局变量可以在任何位置被使用.
局部变量
在局部作用域中使用var关键字声明的变量,属于局部变量.
局部变量只能在这个局部中使用,其它地方都访问不到这个变量.
作用域链:访问变量的路径
以就近原则去访问变量.
当你去使用一个变量的时候 那么会在使用的这个区域中找到是否有这个变量,如果有就直接使用,如果没有,那么就会去上一层的作用域查找.
如果上一层的作用域中找到就使用,如果没有找到继续往上查找,直到查找到全局(window)还是没有找到就会报错:not defined.
案例
var num = 10;
// console.log(num);
function fun() {
var num2 = 20;
num3 = 30;//全局变量
var num = 50;
console.log(num);
console.log(num2);
console.log(num3);
}
fun();
console.log(num2);
// num2 is not defined num2这个变量未定义(没有声明)
console.log(num3);
//30