23-1 JavaScript基础 函数 return arguments 作用域

1 - 函数

1.1 函数的概念

 函数:封装了一段可被重复调用执行的代码块.通过此代码块可以实现大量代码重复的使用

1.2 函数的使用

声明函数:

这种是匿名函数

//声明函数
function 函数名(){
	//函数体代码
}
// function 声明函数的关键字,全部小写
// 函数中的代码不会自己在执行
// 如果函数要实现逻辑代码,需要调用函数: 函数名();
// 函数是做某件事情,函数名一般是动词比如sayHi,getSum
调用函数:
// 调用函数
函数名(); //通过调用函数名来执行函数体代码
  • 调用的时候千万不要忘记添加小括号
  • 口诀:函数不调用,自己不会执行

注意:声明函数本身并不会执行代码,只有调用函数时才会执行函数体代码.

函数的封装
  • 就是把多个功能通过函数的方式封装起来,对外提供欧冠一个简单的函数接口
    -简单理解:把电脑配件组合到机箱中,类似于快递打包
//计算任意两个数之间和的函数
//声明函数
function getSum(num1,num2){
	var sum = 0;
	for(var i = num1; i <= num2;i++){
		sum += i;
	}
	console.log(sum);
}
getSum(1,100);
getSum(20,50);

1.3 函数的参数

函数参数的语法
  • 形参:函数定义时设置接收调用时传入

  • 实参:函数调用时传入小括号内的真实数据

      参数的作用:在函数内部某些值不能固定,我们可以通过参数在调用函数时传递不同的值进去.
    

函数参数的运用:

//带参数的函数声明
function 函数名(形参1,形参2,形参3....){//可以定义任意多的参数,用逗号隔开
	// 函数体
}
// 带参数的函数调用
函数名(实参1,实参2...);

1.调用的实参值时传递给形参的
2.形参可以理解成:不用声明的变量
3.实参和形参的多个参数之间用逗号隔开.

1.4函数形参和实参数量不匹配时

注意:在js中,形参的默认值时undefined.

小结:

  • 函数可以带参数也可以不带参数
  • 声明函数的时候,函数名括号里面的时形参,形参的默认值为undefined
  • 调用函数的时候,函数名括号里面的时实参
  • 多个参数中间用逗号隔开
  • 形参的个数可以和实参的个数不匹配,但是结果不可预计,我们尽量要匹配
  • 如果实参少于形参的时候,里面的循环有可能是不执行的,会直接输出结果

1.4函数的返回值

return语句
返回值:函数调用整体代表的数据;函数执行完成之后可以通过return语句将指定数据返回
//声明变量
function 函数名(){
	return 需要返回的值;
}
console.log(函数名());此时调用函数就可以得到函数体内return后面的值.
  • 在使用return 语句时,函数会停止执行,并返回制定的值.如果用逗号隔开多个值,以最后一个为准.
  • 如果函数没有return,返回的值是undefined

1.5 break ,continue ,return 的区别

  • break : 结束当前的循环体(如果for,while)
  • continue : 跳出本次循环,继续执行下次循环( for,while)
  • return : 不仅可以跳出循环,还能返回return语句中的值,同时还可以结束当前函数体内的代码

1.5 arguments的使用

当不确定有多少个参数传递的时候,可以用arguments来获取.
js中,arguments实际上它是当前函数的一个内置arguments对象,对象中存储了传递的所有实参,展示形式是一个伪数组,因此可以进行遍历.
  • 具有Length属性

  • 按索引方式存储数据

  • 不具有数组的push,pop等方法

    注意:在函数内部使用该对象,因此对象获取函数调用时传的实参.

1.6 函数的两种声明方式

  • 自定义函数方式(命名函数)

    利用函数关键词 function 自定义函数方式

//声明定义方式
function fn() {...}
//调用
fn();
  • 因为有名字,所以也被称为命名函数

  • 调用函数的代码即可以放到声明函数的前面,也可以放到声明函数的后面

  • 函数表达式方式(匿名函数)
    利用函数表达式方式的写法:

//这是函数表达式写法,匿名函数后面跟分号结束
var fn = function() {...}
// 调用的方式,函数调用必须写到函数体下面
fn();
  • 因为函数没有名字,所以也称为匿名函数
  • 这个fn里面存储的是一个函数
  • 函数表达式方式原理跟声明变量方式式一致的
  • 函数调用的代码必须写到函数体后面

2 - 作用域

2.1 作用域概述

JavaScript(es6前)中的作用域有两种:

  • 全局作用域
  • 局部作用域(函数作用域)

2.2 全局作用域

作用于所有代码执行的环境(整个script标签内部) 或独立的Js文件.

2.3 局部作用域

作用于函数内的代码环境,就是局部作用域.
因为跟函数有关系,所以也成为函数作用域

2.4 jS没有块级作用域

  • 在别的编程语言中,在if,for语句中创建变量,仅仅只能在本if,for中使用,超过了范围就无效,会报错.

3 - 变量的作用域

在js中,根据作用域的不同,变量可以分为两种
3.1 全局变量
  • 在全局作用域下的var声明的变量,就是全局变量
  • 注意:如果函数内部没有var声明直接赋值的变量也属于全局变量
	var num = 10;
	console.log(num);

	function fn(){
		console.log(num);//这里没有声明所以也是全局比变量
	};
	fn();
3.2 局部变量
  • 在局部作用域下声明的变量就是局部变量
  • 局部变量只能在该函数内部使用
  • 在函数内部var声明的变量就是变量
  • 函数的形参实际上就是局部变量
	console.log(ary)
	function fun(ary) {
	var sum = 100;
	num2 = 200;
	// console.log(sum)
	fun();
	// console.log(sum)
	// console.log(sum2)
	}
fun();
3.3从执行效率来看局部变量和全局变量的区别
全局变量:在任何地方都可以使用,只有在浏览器关闭时才会销毁,因此比较占内存
局部变量:只有在函数内部使用,当其所在的代码块被执行时,会被初始化;当代码块运行结束时,会被销毁,因此更节省内存空间.

4.作用域链

只要代码都是一个作用域中,写在函数内部的局部作用域,未写在任何函数内部即在全局作用域中;如果函数中还有函数,那么在这个作用域中就又诞生一个作用域:根据**[内部函数可以访问外部函数变量]** 的机制,用链式查找决定哪些数据能被内部数据访问,就称作作用域链.
作用域链:采取就近原则的方式来查找变量最终的值

5.预解析

注意:预解析会把变量和函数的声明在代码执行之前执行完成

5.1 变量预解析
变量的声明会被提升到当前作用域的最上面,变量的赋值不会提升.
  • 注意:变量的提升只提升声明,不提升赋值.
5.2 函数预解析
函数的声明会被提升到当前作用域的最上面,但是不会调用函数
5.3函数表达式声明函数问题
函数表达式创建函数,会执行变量提升
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

不停喝水

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

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

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

打赏作者

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

抵扣说明:

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

余额充值