js基础知识笔记二

函数基础知识

1,函数的基本格式

①函数声明:

  `function 方法名/函数的名字(){
     //要执行的代码
  }`

②函数调用:

  `//函数声明
  function fn(){
  	console.log(1);
  }
  //函数的调用
  fn();`
  注意:在调用时,如果没有加‘()’,会返回函数的方法体。

③函数参数:

  `function func(形参1,形参2){
      //函数执行代码
  }
  func(实参1,实参2);//调用时传参`
  情况一:函数的实参和形参的数量应该相同,但是JS并没有这样的要求。可以不相同
  情况二:如果函数的实参数量少于形参数量,那么多出来的形参会默认会undefined
  情况三:如果函数实参数量多余形参数量,那么多出来的实参就不能通过形参访问。函数忽略掉多余的实参。

④函数返回值:

四种情况:
情况一:如果函数中没有return关键字,那么函数有默认的返回值undefined (如下)
    `<script>
        function fn(){       
                } 
        console.log(fn());
    </script>`
情况二:如果函数中有return关键字,那么这个关键字后面的代码是不会执行的 (如下)
    `<script>
    function fn(){
            return '我被返回了';
            alert('我是不会被执行的');
            } 
    console.log(fn());
    </script>`
 情况三:如果函数中有retruen关键字,这个关键字后面没有值,那么这个函数有返回值是undefined (如下)
    `<script>
    function fn(){
            return ;
            } 
    console.log(fn());
    </script>`
 情况四:如果函数中有return关键字,这个关键字后面有值,那么这个值就是这个函数的返回值。 (如下)
    `<script>
    function fn(){
            return '前端yyds';
            } 
    console.log(fn());
    </script>`

2,函数类型

①匿名函数(也可以叫做没有名字的函数)==》实际开发中用的相对较多
     `var a = function(){
  	     console.log('前端开发');
  		}
     a();`
②具名函数
      `function fn(){
      console.log("一个喜欢画画的前端小猿人");
      }`
③立即执行函数(又叫做IIFE)==》相比来说开发用的多,用于多个函数的封装
     `(function (用于接收实参){
      console.log("我是IIFE函数");
     })(也可以传实参)`

关于立即执行函数的解释

 IIFE作用
    1,防止外部命名空间污染
    2,隐藏内部代码暴露接口
    3,对项目的初始化,只执行一次
 IIFE特点
    1,匿名函数自调用是在定义的同时执行函数
    2,匿名函数自调用只能执行一次
	如果需要一个函数可以执行多次,这个函数必须是有名函数
	如果函数没有名字要想执行必须是自调用,但是只能执行一次
    3、匿名函数自调用,函数整体不会发生预解析,但是函数内部执行代码是要去预解析

3,函数的递归

函数的递归调用,就是函数在内部自己调自己
函数的递归调用是一把双刃剑,如果设计的好,可以帮我们简单的处理事情,如果设计不好就是灾难
函数的递归要想设计好必须有两个条件
- 必须有一个明显的结束条件,不能一直递归下去
- 每一次调用都要有一个趋近结束条件的趋势

情况一(设计不好的递归):

    `<script>
  	function fn() {
  		console.log('设计不好的递归');
  		fn();
  	    }
  		fn();
     </script>`

情况二( 防止递归名字被修改):

    `<script>
	var n = 0;
	function fn() {
		if (n >= 10) {
			return;
		}
		n++;
		console.log('递归部分');
		//fn =1;
		//fn();
           arguments.callee();
		}
	fn();
    </script>`

递归的小案例:
实现10的阶乘

  `function result(n){
if(n <= 1){
	return 1;
	}
return  n * getFactorial(n - 1);
	}
  console.log(result(10));`
posted @ 2021-08-13 20:13  拾呓  阅读(36)  评论(0编辑  收藏  举报