一、函数
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
null 和 undefined 和其它值永远不相等
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;