chapter 4、JS----从入门到熟练的小白之路(持续更新....)

283 阅读3分钟

一、函数

1、定义

函数又叫方法,为了实现某种功能

2、语法

 function 函数名(){
 }

3、函数的执行

 function fn(){
    alert(1);
 }
 
 fn()  // 函数的执行

4、执行函数作用

函数在执行的时候,会开辟一个新的内存空间,把堆内存中存储的一堆字符串复制一份,从上到下执行代码。
函数在执行的时候,会形成一个新的私有执行上下文(执行栈),保护里面的私有变量不受外界的干扰,这种机制叫做闭包
function fn(){
   var res=2;
}
console.log(res); // res is not defined

5、return 返回值

函数里面return 多少,这个函数的返回值就是多少,如果没有返回值,就是undefined

  function fn(){
      return 100
   }
   console.log(fn());  // 100
   function fn(){
     .....
   }
   console.log(fn()); // undefined

6、形参、实参

【形参】:形式上的参数,在定义函数的时候,我们这里只是先预留两个入口,真正要传的数据并不知道。

【实参】:在函数真正执行的时候,传递过来的参数

7、求两个数的之和

函数执行的时候:

  • 形参赋值
  • 变量提升
  • 代码从上往下执行
  function total(n,m){
     return   n+m;
   }
   total(1,3);

8、不知道要传递多少个参数,求所有数之和

【arguments】:类数组

function total(){
        console.log(arguments)
    }
total(3,4,5,6)
 function total(){
       var res=null;
       for(var i=0;i<arguments.length;i++){
         res+=arguments[i];
       } 
       return res;
    }
   var res= total(3,4,5,6);
   console.log(res);

9、求所有数之和(考虑非有效字符)

function total(){
     var res=null;
     for(var i=0;i<arguments.length;i++){
        var item=Number(arguments[i]);
        if(isNaN(item)){
            item=0;
        }
        res=res+item;
     }
     return res;
}
var result1=total("1",2,"16px",3);
console.log(result1);

[升级版2]

如果传的实参中包含字符串,就变成数字,如果是非有效数字,就直接略过

function fn(){
   var total=null;
   for(var i=0;i<arguments.length;i++){
       var item=Number(arguments[i]);
       isNaN(item)?null:total+=item
   }
   return total;
}

[高级版3:es6]

function fn(...arg){
  return eval(arg.filter((item)=>!isNaN(item)).join("+")) 
}
var res=fn(1,2,3,"3","3px");

10、接收参数的方式:

  • 形参
  • arguments

11、实名函数和匿名函数

  • 实名函数:就是有名字的函数
  • 匿名函数:没有名字的函数,比较常见的有
  • 函数表达式:把一个匿名函数赋值给一个变量或者事件
    • 自执行函数:创建和执行一起完成。(()、+、~、!)
//===== 实名函数
function fn(){
}
//=====>匿名函数
    //======> 函数表达式
var f1=function(){
}
    //======> 函数表达式
odiv.onclick=function(){
}
   // 自执行函数
   
   (function(){
   })();
  ~function(){
  }();
  +function(){
  }();
  -function(){
  }();
  !function(){
  }();

12、箭头函数(es6)

var fn=function(a,b){
    return a+b
}
var fn=(a,b)=>{
    return a+b;
}
// 如果执行语句只有一条,return 也可以省去
var fn=(a,b)=> a+b;
// 如果参数只有一个,小括号也可以省去
var fn=a=>a+2;
fn(3)

二、判断语句

if/else if /else
if(){
}else if(){
}else{
}

1、条件判断里面的相互转换规则

对象==对象的时候,如果引用地址相同,就相等,如果引用地址不同就不等

对象==数字类型的时候,都先转换为数字,再比较

对象==字符串类型的时候,把对象转换为字符串,再进行比较

对象==布尔数据类型的时候,都先转换为数字,在比较

数字==字符串,都先转换数字类型,再比较

数字==布尔,都先转换为数字类型,再比较

字符串==布尔,都先转换为数字类型,再比较

//==========对于不同的数据类型转换规律:
1)对象和字符串转换的时候,是对象先转为字符串然后再进行比较
2)除了第一种,不同数据类型比较都是先转换为number数字,再进行比较
null==undefined  true 
null===undefined false
nullundefined 和其它值永远不相等
NaN 和其它值永不相等
//==========需要特殊记忆下

【2.1】练习:


1==true  ===>true
1==false  ====false
2==true ===>false
[]==true  ==>false
![]==true ==> false
[]==[] 
var ary1=[1,2];
var ary2=ary1
ary1==ary2;