JS 函数

2023-11-03

JS 函数

关键字形式的函数

<script type="text/javascript">
	//关键字形式的函数
	//声明部分
	function fun(){
		//书写封装功能性的代码
		console.log("我是一枚大帅哥");
		console.log("虽然不是真的");
	}
	//调用部分
	fun();
	//函数在js当中属于引用类型数据
	console.log(typeof fun);//没有function类型,只有object类型
	
	//函数如果不调用,函数体的代码不执行
	console.log(1);
	function func(){
		var a = 100;
		var b = 200;
		console.log(a+b);
	}
	console.log(2);
	func();
	console.log(3);
	//1,2,300,3
</script>

函数的形参与实参

<script type="text/javascript">
	//声明一个关键字形式的函数
	function add(a,b){//a,b是形参,不需要用var声明
		console.log(a,b);
	}
	//调用
	add("小明","小红");//小明,小红是实参
	add();//undefined undefined
	add(1);//1 undefined
	add(false,[]);//false []
	add(1,2,3);//1 2
	//形参的个数不能决定实参的个数
	//实参的个数也不能决定形参的个数
</script>

局部变量和全局变量

<script type="text/javascript">
	//局部变量:函数形参、函数体内声明的变量都是局部变量
	//局部变量只能在函数体内使用
	function even(num){
		var flag;
		if(num % 2 == 0){
			flag =num + "是偶数";
		}else{
			flag = num + "不是偶数";
		}
		console.log(flag)
	}
	even(65);
	even(66);
</script>
<script type="text/javascript">
	//全局变量:除了函数形参、函数体中声明的局部变量以外,都是全局变量
	//全局变量可以在js行为层中任意地方使用
	for (var m=0;m<2;m++) {
		console.log(m);//0,1
	}
	console.log("循环体外部"+m);//循环体外部2
	if(true){
		var k = 9999;
		console.log(k);//9999
	}
	console.log(k);//9999
	
	function fun(){
		console.log(m);//2
		console.log(k);//9999
	}
	fun();
</script>

作用域

<script type="text/javascript">
	//全局作用域:书写js代码,范围最大的两个script标签之间
	//函数拥有作用域:函数的作用域范围是在函数体内,在全局作用之内
	//全局变量:
	var count = 666;
	function fun(){
		console.log(count);
	}
	fun();
</script>

练习(经典)

<script type="text/javascript">
	//第一题
//	var num=66;
//	function fun(){
//		var num = 99;
//		console.log(num);//99
//	}
//	fun();
	//第二题
	var num=66;
	function fun(){
		//只把声明部分提升到作用域最开始部分
		//在JS中任何语句都阻挡不了变量声明部分提升,会提升到当前作用域最上方
		//相当于var num;
		console.log(num);//undefined
		var num = 99;
	}
	fun();
	//第三题
	var num=66;
	function fun(){
		//只把声明部分提升到作用域最开始部分
		//在JS中任何语句都阻挡不了变量声明部分提升,会提升到当前作用域最上方
		//相当于var num;
		console.log(num);//undefined
		if(false){
			var num = 99;
		}
	}
	fun();
</script>

关键字return

<script type="text/javascript">
	//return 一般在函数体中使用
	//函数体中return 后面的语句不再执行
	function fun(){
		console.log("我是大哥");
		console.log("我是二哥");
		return;
		console.log("我是三哥");
	}
	fun();
	for (var m =0;m<3;m++) {
		console.log(12);
	}
</script>
<script type="text/javascript">
	//第二个作用:可以把函数体中计算的结果返回
	function bigStar(){
		var str = "二哈可以咬人";
		return str;//将函数体中计算完的结果返回给函数体外面,函数体外面可以获取返回结果
	}
	var result = bigStar();
	console.log(result);
</script>
<script type="text/javascript">
	function add(num,num1){
		return num+ num1;
	}
	var result = add(66,1234);//1300
	result = add(1);//NaN
	console.log(result);
</script>

函数练习

<script type="text/javascript">
	//封装一个函数,判断数字是不是水仙花数字
	function isNarcissus(num){
		var ge = num%10;
		var shi = parseInt(num%100/10);
		var bai = parseInt(num/100);
		if (num==Math.pow(ge,3)+Math.pow(shi,3)+Math.pow(bai,3)){
			return true;
		}
		return false;
	}
	for (var m = 100;m<1000;m++) {
		var result = isNarcissus(m);
		if(result){
			console.log(m);
		}
	}
</script>
<script type="text/javascript">
	//设计一个函数,判断这个数字是不是完美数字
	//如6:数字的约数(不包含本身)之和等于这个数字本身,即为完美数字
	function isPerfectNum(num){
		var sum = 0;
		for (var m = 1;m<num;m++) {
			if (num%m==0){
				sum += m;
			}
		}
		if(sum == num){
			return true;
		}
		return false;
	}
	for (var i = 1; i < 1001; i++) {
		var result = isPerfectNum(i);
		if(result){
			console.log(i);
		}
	}
</script>

表达式形式的函数

<script type="text/javascript">
	//表达式形式的函数
	//声明
	var a = function (){
		console.log("打大所多");
	}
	//调用
	a();
</script>

关键字形式的函数与表达式形式的函数的区别

<script type="text/javascript">
	//表达式形式的函数
	console.log(fun);//undefined
	var fun = function(){
		console.log("表达式形式的函数");
	}
	fun();
	// 表达式形式得函数只能在声明之后调用
	//表达式形式函数:由于变量声明部分提升(提升到当前作用域最上方),所以是undefined
	//关键字形式函数
	console.log(isOdd);
	isOdd(9);
	// js解析器在解析代码的时候,除了可以将变量声明部分提升到当前作用域的最上方,也可以
	// 将关键字形式的函数提升到当前作用域的最上方
	function isOdd(num){
		if(num%2!=0){
			alert(num+"是奇数");
		}else{
			alert(num+"是偶数");
		}
	}
	isOdd(6);
	isOdd(7);
</script>

回调函数

<script type="text/javascript">
	//声明函数
	function promiss(a,b,callback){
		console.log(a);
		console.log(b);
		console.log(callback);
		callback();
	}
	//调用
	promiss(1,"默默默默",function(){
		console.log("已执行");
	});
	
	//回调函数
	//当某一个函数执行的时候,传递的实参是另一个函数的声明部分,这个实参的函数即为回调函数
</script>

递归函数

<script type="text/javascript">
	//函数使用分为声明和调用
	function add(){
		//函数体中可以写任意语句
		console.log("哈哈蛤");
		//函数自己调用自己
		add();
	}
	//调用
	add();
</script>

IIFE

<script type="text/javascript">
	//IIFE immediately invoking function express
	// 在声明表达式函数的时候,立刻执行一次
	//表达式函数的声明部分
	var fun = function(){
		console.log("我执行了");
	}();
	
	//+,-,!,()可以将关键字函数变为表达式形式函数,立即执行一次
	+function(){
		console.log("立即调用+");
	}();
	-function(){
		console.log("立即调用-");
	}();
	!function(){
		console.log("立即调用!");
	}();
	(function(){
		console.log("立即调用()");
	})();
	
	//错误写法,关键字形式函数不能这么调用
//	function sum(){
//		console.log("我执行了2");
//	}();
</script>
<script type="text/javascript">
	//每个IIFE都有自己的作用域,彼此不影响
	+function(num){
		num += 1;
		console.log(num);//100
	}(99);
	
	+function(num){
		console.log(num);//66
	}(66);
</script>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JS 函数 的相关文章

随机推荐