js中函数需要注意地方的个人总结
1.js中函数的声明有声明提升的过程,而函数表达式必须等到所在的代码行时,才会进行解析,例:
函数声明:
console.log(sum(10,20));
function sum(num1,num2){
return num1 + num2;
}
此时,函数虽写在打印的值之后,但因为声明提升,这时的console.log可以打印出函数的值,即30;
函数表达式:
console.log(sum1(10,20));
var a=function sum1(num3,num4){
return num3+num4
}
用函数表达式声明时,变量只是声明提前,并不提前值,所以此时的代码,会是报错的。
tips:函数默认的返回值为undefined,需要返回指定的值需要return语句。
2.函数中参数的类型:
(1)函数中的参数分为形参和实参两种,形参就是形式上的参数,只提供便利,不是必须写;实参则为调用有函数时传入有值的参数。
个人理解:可将形参和实参比喻为方程式中的未知数和已知的解答,
若形参为x+y=10, 那么实参便是4和6,或7和3. 实参拥有明确的值,而形参中,不管写什么,都只提供观看上的便利,并没有实际作用。
(2)参数的类型arguments对象:对象的长度是由实参决定的,不是由形参决定,length属性,也代表着实参传入了几个参数。
3.函数没有重载
function addSomeNumber(num){
return num + 100;
}
function addSomeNumber(num){
return num + 200;
}
console.log(addSomeNumber(100));
输出的值为300,可见第二个函数将第一个函数给覆盖了。
4.全局变量和局部变量
局部变量:
在其内边定义的变量成为局部变量,
只能在内部访问,
局部作用域:起作用的区域.
全局变量: 在函数体外,整个执行环境为window下定义的变量成为全局变量 可在全局及局部均可访问到全局作用域:起作用的区域.
var a = 30;
function aa(){
a = 20;
console.log(a)
}
console.log(a);
函数中的console.log(a)会输出undefined,因为全局变量中的a=30,可以进入函数中,而一个变量不能同时拥有两个值。
而函数外的console.log(a)会输出30,在函数中的变量只会在函数中取值,不能到全局进行取值,因此局部变量中的值20对全局没有影响。