Javascript基础之函数

8 篇文章 2 订阅
2 篇文章 0 订阅

 

(一) 作用

封装一段待执行的代码,减少代码的冗余,重复使用

(二) 语法

//函数声明
  function 函数名(参数列表){
      函数体
      return 返回值;
  }
  //函数调用
  函数名(参数列表); 

注:若实参的个数多于形参的个数,会取到形参的个数;

若实参的个数少于形参的个数,多于的形参定义为undefined,结果是Nan

定义形参就相当于在函数作用域中声明了变量

 

 函数名自定义,见名知意,命名规范参照变量的命名规范。普通函数以小写字母开头,用于区分构造函数(构造函数使用大写字母开头,定义类)

 

 

  • 函数的返回值 return

function (){
    return; 
}

注:return语句之后的代码不被执行,只能返回一个结果,返回多个值时,借用数组。

若函数没有retuen ,返回undefined

//使用break可以退出当前的循环 ; // continue用于跳过当次循环

//使用return可以结束整个函数

  • arguments的使用

当我们不确定有多少个参数传递的时候,可以用arguments来获取。在JavaScript中,arguments实际上它是当前函数的一个内置对象。所有函数都内置了一个arguments对象,arguments对象中存储了传递的所有实参。

function (){
	console.log(arguments) //[1,2,3]
}(1,2,3)


function getMax(){
	var max = arguments[0];
	for(var i = 1; i< arguments.length;i++){
		if (arguments[i] >max){
			max =arguments[i]
		}
	}
	return m
}
getMax(2,5,3)
getMax(2,5,3,56)

 

(三)匿名函数

匿名函数:省略函数名的函数。语法为:

  • 匿名函数自执行

(function (形参){
  
 })(实参);
  • 定义变量接收匿名函数

 var fn = function (){};
 fn(); //函数调用

四)作用域

JavaScript 中作用域分为全局作用域和函数作用域,以函数的{ }作为划分作用域的依据

  1. 全局变量和全局函数

    • 直接编写在script标签中的JS代码,都在全局作用域全局作用域在页面打开时创建,在页面关闭时销毁 在全局作用域中有一个全局对象window. 它代表的是一个浏览器的窗口,它由浏览器创建我们可以直接使用

    • 所有省略 var 关键字定义的变量,一律是全局变量

  2. 局部变量/局部函数

    • 使用函数声明形式创建的函数function 函数(){} 它会在所有的代码执行之前就被创建,所以我们可以在函数声明前来调用函数使用函数表达式创建的函数,不会被声明提前,所以不能在声明前调用

  3. 作用域链 局部作用域中访问变量或函数,首先从当前作用域中查找,当前作用域中没有的话,向上级作用域中查找,直至全局作用域

 

6.预解析

JavaScript代码是由浏览器中的JavaScript解析器来执行的。JavaScript解析器在运行JavaScript代码的时候分为两步:预解析和代码执行。

  • 预解析

    • 变量预解析(变量提升)

    把所有的变量声明提升到当前的作用域最前面 不提升赋值操作

    • 函数预解析(函数提升)

    把所有的函数声明提升到当前作用域的最前面 不调用函数

引擎会把js里面所有的 var还有 function提升到当前作用域的最前面

  • 代码执行

f1();
console.log(c);
console.log(b);
console.log(a);
function f1(() {
var a = b =C= 9;
console.log(a);
console.log(b);
console.log(c);
}

//以下代码
function f1() {
var a = b =c=9;
//相当于var a= 9; b = 9; c= 9;  b 和c直接赋值没有var声明当全局变量看

//集体声明var a = 9, b = 9, c = 9
console.log(a); //9
console.log(b); //9
console.log(c); //9
}
f1();
console.log(c); //9
console.log(b);//9
console.log(a); //undefined

 

(五)高阶函数

高阶函数是对其他函数进行操作的函数,它接收函数作为参数或将函数作为返回值输出。

function fn(callback){
    callback&&callback()
}

(六)闭包

闭包( closure )指有权访问另一个函数作用域中变量的函数。

function fu(){
    var num = 10;
    function fun(){
        console.log(num)
    }
    fun();
}

(七)递归

一个函数在内部可以调用其本身

递归函数的作用和循环效果一样 由于递归很容易发生“栈溢出”错误( stackoverflow ),所以必须要加退出条件return。

  • 阶乘

    function fn(n){
        if(n==1){
            return 1;
        }
        return fn(n-1)*n
    }

  • 斐波那契数列

    //1 1 2 3 5 8
    function fn(){
        if(n==1||n==2){
            return 1;
        }
        return fn(n-1)+fn(n-2)
    }

  • 递归遍历数据

    function getID(json,id){
        json.forEach(function(item){
            if(item.id==id){
                console.log(item)
            }else if(item.goods&&item.goods.length>0){
                getID(item.goods,id)
            }
        })
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

墨非墨Lg

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值