函数的默认参数
JS函数参数的默认值都是undefined,写默认参数的方法有两种,代码如下:
以前常用方法(ES5):
function sum(a,b){
b=(typeof b !== 'undefined') ? b:1;
return a*b;
}
sum(5,2);//10
sum(5);//5
现在可用方法:
function sum(a,b=1){
return a*b;
}
sum(5,2);//10
sum(5);//5
以上两种方法都是将b的默认值设置为1,当传入形参为空或者没有传入形参时,默认b的值为1
注:位于默认参数后非默认参数,参数设置仍然是从左往右,覆盖默认参数,即使参数没有默认值
示例:
function f(x = 1, y) {
return [x, y];
}
f(); // [1, undefined]
f(2); // [2, undefined]
let定义
起源:let的出现是为了解决ES6之前老版本标准中的两个问题
- 在JavaScript中如果定义了同名的变量,那么后定义的变量会覆盖前面定义的变量
- 在老版本标准中JavaScript可以先使用变量再定义,并且不会报错
let不能定义同名变量,一旦定义在ES6中就会报错,而且let不能先调用再定义
全局变量
定义:在整个页面任何地方都可以调用的变量就是全局变量
写法:
- 写在JavaScript的{}之外的变量
- 在块级作用域中用var定义的变量
- 在局部作用于或者块级作用域中省略var或者let的变量
局部变量
定义:只能在固定代码块中被使用的变量,外部不能使用局部作用域中定义的局部变量
写法:在函数内部,写在JavaScript函数后面的{}中的变量就是局部变量
注:局部变量优先于全局变量
块级变量
定义:任何一对{}中的代码集都是属于一个块,在块级作用域中使用let声明的变量
写法:在{}中使用let声明
垃圾回收机制
- 在JavaScript的函数中,每一个局部变量都会占着一定的空间,用来存储他们的值,一旦函数执行结束,局部变量就没有存在的意义了,所以JavaScript就会通过垃圾回收机制来销毁这些局部变量,达到自动释放他们所占的内存空间的目的,减小浏览器的运行负担
- 如果想保留局部变量的值,可以采用return返回或者利用全局变量来保存,所以如果一个函数中的变量是局部变量而运行完之后没有return保存数据,当网页要输出的时候就会出现没有这个变量的情况,导致浏览器报错