1.函数的使用
function 函数名(){
函数体
}
//函数调用,执行函数,函数必须调用,不然不执行
函数名();
函数命名规范:字母,数字,下划线,$,不能以数字开头,小驼峰命名法,第二个单词首字母大写,例如:getName;
2.函数的作用
函数是执行特定任务的代码块,优点是可以让代码复用,提高实际开发的效率
3.函数传参
function 函数名(形参1,形参2....){
函数体
}
函数名(实参1,实参2....)
函数括号里面的叫做形参,和变量作用差不多,也是存储数据的,而调用时小括号里面的叫做实参,实参调用时,相当于给变量赋值(形参与形参,实参与实参中间用','号分隔;
传参的作用
函数如果不传参就相当于说是固定了,不论你调用多少次都仅仅是哪个方法,连数值都不变,我们多次调用它,就没有意义,而添加了实参,可以很大程度上提高我们函数的灵活性,就是说函数就像是个计算公式,我们只需要将数值放上去,它会给出我们想要的结果
形参与实参的数目尽量要一致
如果调用时实参大于形参,例如:
function getSum(a,b) {
document.write(a+b+'<br>');
}
getSum(11,22,33);
//输出的结果会是33
它只会按形参的数目来从左往右的截取
如果形参大于实参:
function getSum(a,b) {
document.write(a+b+'<br>');
}
getSum(11);
//输出的结果会是NaN
//因为你实参数目少的话,会自动给你补一个undefined来传递给形参,undefined与任何数相加结果都为NaN
所以,你如果真不想实参数目等于形参数目,你可以让实参多于形参☺☺ 你也可以给函数一个默认值,让程序更严谨
function getSum(a = 0,b = 0){
document.write(a+b+'<br>');
}
getSum(11);//这样的话得到的值是11
默认值只会在缺少实参参数传递时 才会被执行,所以有参数会优先执行传递过来的实参, 否则默认为 undefined
函数的返回值
前面说了函数是执行特定任务的代码块,所以它在执行后需要将结果返回给我们,我们才可以很好的进行下一步的操作 返回值不是必须的,我们要根据具体的需求来判断一个函数需不需要返回值
返回值书写:return 值; 注意:
return 后面代码不会再被执行,会立即结束当前函数,所以 return 后面的数据不要换行写
return函数可以没有 return,这种情况函数默认返回值为 undefined
作用域
通常来说,一段程序代码中所用到的名字并不总是有效和可用的,而限定这个名字的可用性的代码范围就是这个名字的作用域。
作用域的使用提高了程序逻辑的局部性,增强了程序的可靠性,减少了名字冲突。
作用域分为全局作用域和局部作用域(函数作用域)
全局作用域:作用于所有代码执行的环境(整个 script 标签内部)或者一个独立的 js 文件
局部作用域:作用于函数内的代码环境,就是局部作用域。 因为跟函数有关系,所以也称为函数作用域。
同样的,因为作用域的不同,变量也分为了全局变量和局部变量
全局变量:全局变量在任何区域都可以访问和修改
局部变量:局部变量只能在当前函数内部访问和修改
局部变量如果未声明直接使用,相当于window.变量,整个页面当做了一个对象
// let num = 10;
// function fn() {
// let num = 20;
// console.log(num);
// }
// fn();
/* function fn2() {
let count = 20;
}
console.log(count); */
// let num2 = 30
// function fn3() {
// num2 = 20;//相当于全局变量windows.num2;
// console.log(num2);
// }
// fn3();
// console.log(num2);
/* function fn4(x,y) {//形参相当于局部变量
console.log(x,y);
}
console.log(x);//x会当成一个未定义的变量 */
var num4 = 10;
function fn4() {
var num4 = 20;
console.log(num4);//20
}
console.log(num4);//10
fn4();
//访问原则,在能够访问到的情况下找局部,如果局部没有,一直往上寻找,直到找到为止
匿名函数
函数可以分为匿名函数和具名函数,在之前我们写的函数都是具名函数,是有函数名的,匿名函数没有函数名,无法直接使用
函数表达式
将匿名函数赋值给一个变量,并且通过变量名称进行调用 我们将这个称为函数表达式:
let fun = function(){
//函数体
}
//调用
fn();
//其中函数的形参和实参使用跟具名函数一致。
立即执行函数 (函数)()或(函数())
(
function () {
console.log(1111);
}
)();
(function (x,y) {
console.log(x+y);
}
)(1,5);
//注意: 多个立即执行函数要用 ; 隔开,要不然会报错
立即执行函数可以防止变量的污染
拓展:上面说的函数都只是普通函数,构造函数和普通函数的区别就是调用方式的不同 普通函数是直接调用,而构造函数需要使用new关键字来调用,构造函数命名一般是单词首字母大写例如:Person