知识点:function、函数的参数、函数的返回值、作用域
什么是函数:函数是由事件驱动的或者当它被调用时执行的可重复使用的代码块。
函数的作用:函数常常被用于封装一些方法,避免重复去写重复的代码,减少代码量
JavaScript函数只有在调用时才会去执行
JavaScript语法:
JavaScript函数通过function关键词进行定义,其后是函数名和括号()
function fun(){//fun函数名
//执行的代码
}
JavaScript函数的创建方式:
封装到函数中的代码不会即可执行
函数中的代码会在函数调用的时候执行
调用函数:语法 函数对象();
当调用函数时,函数中封装的代码会按照顺序执行
1. 使用构造函数创建一个函数对象
var fun= new function(){//不建议使用构造函数创建函数
alert("这是通过构造函数创建的函数");
}
fun();//调用函数
console.log(typeof fun);// typeof检查数据类型 function
2. 使用函数声明创建一个函数
语法:function 函数名([形参1,形参2,…,形参N]){
//语句
}
说明:[形参1,形参2,…,形参N]这里的[]表示可以使用参数也可以不使用参数
函数的调用:函数名([实参1,实参2,…]);
function fun2(){
alert("这是通过函数声明创建的函数");
}
3. 使用函数表达式创建一个函数/匿名函数
var fun3=function(){
alert("这是使用函数表达式创建的函数");
}
函数的参数:
在调用函数时,您可以向其传递值,这些值被称为参数。
这些参数可以在函数中使用。
您可以发送任意多的参数,由逗号 (,) 分隔:
myFunction(argument1,argument2)
当您声明函数时,请把参数作为变量来声明:
function myFunction(var1,var2){
//代码
}
变量和参数必须以一致的顺序出现。第一个变量就是第一个被传递的参数的给定的值,以此类推。
function sum(a,b){
var add=a+b;//
console.log(add);
}
sum(123,456);//579
sum(false,"123");//false123 false+"123" =>false123
调用函数时解析器不会检查实参的类型,所以要注意,是否有可能会接收到非法的参数,如果有 可能则需要对参数进行类型的检查
调用函数时,解析器也不会对检查实参的数量
多余的参数将不会被赋值
如果实参少于形参的数据,则没有对应实参的形参将是undefined
function result(a,b,c){
console.log("a="+a);
console.log("b="+b);
console.log("c="+c);
var sum=a+b+c;
console.log("sum="+sum);
}
result(123,234);//实参少于形参 sum=NaN
result(123,234,345,6767,78,9);//实参多余形参 sum=702
函数的返回值:
当 JavaScript 到达 return 语句,函数将停止执行。
如果函数被某条语句调用,JavaScript 将在调用语句之后“返回”执行代码。
函数通常会计算出返回值。这个返回值会返回给调用者:
实例
计算两个数的乘积,并返回结果:
var x = myFunction(7, 8);// 调用函数,返回值被赋值给 x
function myFunction(a, b) {
return a * b;// 函数返回 a 和 b 的乘积
}
//x 的结果将是:56
在函数return后的语句都不会执行
如果return语句后不跟任何值,就相当于返回一个undefined
function sum(a,b){
var c=a+b;
return c;
alert("234234");//return后的语句不会执行
}
var total = sum(12,45);//定义一个变量接收函数的返回值
console.log("返回结果=="+total);//返回结果==57
立即执行函数:
函数定义完,立即被调用,这种函数叫做立即执行函数
立即执行函数往往只会执行一次
(function(){
alert("这是一个立即执行函数");
})();
(function(a,b){
alert(a+b);
})(23,23);//实参,运行结果为:46
作用域:局部变量、全局变量
在函数作用域中可以访问全局变量,但在全局作用域中无法访问到局部变量
- 当在函数作用域操作一个变量时,它会先在自身作用域中寻找,如果有就直接使用,如果没有就向上一作用域中寻找,直到找到全局作用域,如果全局作用域中仍然没有找到,则会报错ReferenceError
- 在函数中想要访问全局变量可以使用window对象
局部变量:在JavaScript函数内部声明的变量(使用 var)是局部变量,所以只能在函数内部访问它。(该变量的作用域是局部的)。
可以在不同的函数中使用名称相同的局部变量,因为只有声明过该变量的函数才能识别出该变量。
只要函数运行完毕,本地变量就会被删除。
全局变量:在函数外声明的变量是全局变量,网页上的所有脚本和函数都能访问它。
var num=30;//全局变量
function Fun(){
var num=20;//局部变量
console.log(num);//20
//操作时先在函数中寻找(如果有直接使用),如果没有才会往上一级寻找
}
Fun();
console.log(num);//30
var num2=30;//全局变量
function Fun2(){
//var num2=20;//局部变量
console.log(num2);//30
//操作时先在函数中寻找(如果有直接使用),如果没有才会往上一级寻找
}
Fun2();
console.log(num);//30