函数
函数:是被设计成执行特定任务的代码块,函数可以把具有相同或相似逻辑代码包裹起来,通过函数调用执行这些被包裹的代码逻辑。这么做的优势是有利于精简代码,方便复用。
函数的使用
函数的声明语法
function 函数名 (){
函数体
}
function sayHi (){
document.write('Hello!');
}
命名规范
-
尽量使用驼峰命名
-
前缀应该为动词
函数的调用
函数只有被调用了,函数体内的代码逻辑才会被执行
函数名();
sayHi();
函数的参数
若函数完成功能需要调用者传入数据,那么就需要有参数的函数,这样可以极大的提高函数的灵活性
声明语法
function 函数名(参数列表){
函数体;
}
参数列表:传入数据列表,声明这个函数哟啊传入几个数据,多个数据之间用逗号隔开
function getSum(num1 , num2){
document.write(num1+num2);
}
调用
函数名(传递的参数列表);
getSum(5,6);//参数用逗号隔开;页面会输出11;此处的参数为实参
形参:声明函数时写在函数名右边小括号里的叫形参。 (形式上的参数)
实参:调用函数时写在函数名右边小括号里面的叫实参。 (实际上的参数)
当带参数的函数被调用,没有传入参数时,会出现默认传入undefined 的参数,结果会是NaN;此时我们可以对函数做如下改进:给函数一个形参默认值
function getSum(num1=0 , num2=0){
document.write(num1+num2);
}
当不传入形参的值时,形参会使用声明时给的值
函数的返回值
当调用某个函数,这个函数会返回一个结果出来,这就是有返回值的函数
在函数体的最后一行前进行返回
return 数据;
function getSum(num1=0 , num2=0){
return num1+num2;
}
没有返回值,默认返回undefined
作用域
通常来说,一段程序代码中所用到的名字并不是总是有效可用的,而限定这个名字的可用性的代码范围就是这个名字的作用域
。 作用域的使用提高了程序逻辑的局部性,增强了程序的可靠性,减少了名字冲突。
全局作用域
作用于所有代码执行的环境;整个script标签内部或一个独立的JS文件。
let num = 10 ;//全局作用域
console.log(num);
function f(){
console.log(num);
}
f();
局部作用域
作用于函数内部的代码环境就是局部作用域。因为跟函数有关系,所以也称函数作用域。
function f(){
let num = 10 ;//局部作用域,只能在函数体内部或循环体内部被使用
console.log(num);
}
f();
如果函数内部变量没有声明,直接赋值也当全局变量,但是强烈不推荐
。
匿名函数
没有名字的函数,无法直接使用
使用方式:
-
函数表达式:将匿名函数赋值给一个变量,并通过变量名称进行调用。
-
语法:
let fn = function(){ 函数体 } let fn = function(){ console.log('我是函数表达式'); } //调用 fn();
-
函数表达式和具名函数的不同
- 具名函数的调用可以写到任何位置,而函数表达式必须先声明函数表达式,在调用
-
-
立即执行函数(匿名函数):避免全局变量之间的污染
-
语法:
必须加分号
(function(){ 函数体 } )(); (function(x,y){ console.log(x+y); } )(1,2); (function(){ console.log('立即执行函数'); } )();
其他补充
- 两个相同的函数,后面的会覆盖前面的函数。
- 在不同作用域下,变量的使用遵循就近原则
- 在JavaScript中实参的个数和形参的个数可以不一致。
- 如果形参过多,会自动填上undefined。
- 如果实参过多,那么多余的实参会被忽略(函数内部有一个arguments里面装着所有的实参)。
- 函数一旦碰到return就不会继续执行下去了;函数的结束用return。
逻辑中断
短路:只存在于&&和||中,当满足一定条件会让右边的代码不在执行
function getSum(x,y){
x=x||0;
y=y||0;
console.log(x+y);
}
getSum(1,2);//3
getSum();//0
转换为Boolean类型
’ '、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true