js函数哪些事

JS函数概念

  js函数就类似把任意一段代码放在一个盒子里面,调用函数就是直接调用这个这个盒子,让盒子执行里面得代码,得到想要得结果

函数规则

  高内聚,低耦合。---高内聚:即函数要有很明确的功能性,解决一类问题,而不只是一个问题;低耦合:即函数对其他元素的依赖性,函数在执行过程中,不应该太多的依赖其他的方法或者函数,加入其他方法出问题就会影响到函数的执行。

函数的定义

  • 函数的定义分为声明式和赋值式
//声明式
function fn(){
   console.log("我是函数");
}
//调用函数
fn();

//赋值式
var fn1 = function(){
    console.log("我是赋值式函数");
}
<!--调用方式-->
fn1();

函数的声明式定义与调用

  • 通过function关键字来声明一个函数,function关键字和var关键字的行为几乎一致,都会在内存上开辟一块空间,用来存储数据
function fn(){
   console.log("我是函数");
}
//调用函数
fn();
<!--function: 声明函数关键字,表示接下来是一个函数-->
<!--fn:函数得名字,自己定义得(遵循变量名得命名规则和规范)-->
<!--():必须写,用来放参数的位置-->
<!--{}:用来放函数代码的位置-->

函数命名规则与规范

  • 规则:必须遵守的!!
    • 一个变量名称可以由 数字、字母、下划线(_)、美元符号($)组成
    • 严格区分大小写
    • 不能由数字开头,不能适应中文汉字命名
    • 不能是 保留字/关键字
    • 不能出现空格
  • 规范:建议遵守的(不遵守不会报错)
    • 变量名尽量有意义(语义化)
    • 首字母小写
    • 遵循驼峰命名规则 

 函数的赋值式定义和调用

  • 函数属于数据类型中的引用类型中的一种,所以也可以认为函数是一种数据
//赋值式函数
var fn1 = function(){
    console.log("我是赋值式函数");
}
<!--调用方式-->
fn1();

<!--赋值式函数中,如果给了函数函数名,但是无法通过函数名直接调用函数,必须通过被赋值的变量-->
var fn1 = function fn(){
    console.log("我是赋值式函数");
}
<!--调用方式-->
fn();  //会报错,test1.html:16 Uncaught ReferenceError: fn is not defined
//正确调用
fn1();

声明式函数和调用式函数的区别

  • 声明式函数在函数定义之前或之后调用都可以(因为js在预解析的时候,函数变量会整体提升)
  • 赋值式函数只能在函数定义之后调用
<!--声明式函数调用-->
fn();
function fn(){
    console.log("ssss");
}
fn();
-------------------------
//赋值函数的调用
fn();//报错  Uncaught TypeError: fn is not a function 因为此时仅仅式变量fn获得局部提升,fn此时为undefined
var fn = function(){
    console.log('ssssaaaa');
}
fn(); //正确 
函数的参数
  • 函数参数分为形参和实参,函数的参数理论上可以有多个,但是实际上,当函数参数过多会使用对象或者数组进行传参
//声明式
function fn(形参){
    <!--函数代码-->
}
fn(实参);
--------------------
//赋值式
var fn = function(形参){
    <!--函数代码-->
}
fn(实参);
  • 当函数的实参个数与形参个数相等时,此时参数是一一对应的,但是当实参个数与形参个数不同时  
<!--实参数量比形参数量少:  
其余未赋值的形参值都为undefined;-->
function foo( a , b , c , d ){
    console.log( a , b , c , d );
}
foo( 1 );

---------------

<!--实参比形参多 :  -->
<!--剩下的参数都使用arguments关键字进行接收, 使用 [] 进行取出;-->
 function foo( a ){
 <!--arguments => 接受所有的实际参数;-->
console.log( arguments[0] ); //1
console.log( arguments[1] ); //2
...
console.log( arguments[6] ); //7
}

foo( 1 , 2 , 3 , 4 , 5 , 6 , 7 );
函数的return
  • 函数调用本身也是一个表达式,表达式就应该有一个值出现
  • 现在的函数执行完毕之后,是不会有结果出现的
  • 关键字:返回,给函数一个返回值和终端函数
  • 执行函数时,函数内部的代码从上到下的依次执行,return关键字可以在函数中间的位置停掉,让后面的代码不在继续执行。无论有多少个return,只会执行第一个return, 因此函数的返回值只能有一个;
  • return可以返回任意数据类型(包括函数)
function fn() {
  // 执行代码
}
console.log(fn()) // undefined
-----------------
function fn() {
  // 执行代码
  return 100
}
// 此时,fn() 这个表达式执行完毕之后就有结果出现了
console.log(fn()) // 100

函数的优点

  • 封装代码,使代码更简洁
  • 复用,在重复功能的时候直接调用
  • 代码执行时机,随时可以在我们想要执行的时候执行

 

 希望能对伙伴们起到作用,如果有伙伴发现不足之处,请伙伴们指点!

 最后,用一句诗与伙伴们共勉-----不经一番寒彻骨,怎得梅花扑鼻香!