函数:基本概念 预解析 变量作用域递归

    科技2022-07-14  116

    函数

    // 函数的基本概念

    // 什么是函数: // 实现固定功能的代码块 // 函数是工具,是实现功能的工具 // 函数是通过其中的代码,来实现所谓的功能 // 函数的特点: // 封装: 将需要的代码,写入到函数中 // 重复: 一个函数可以反复调用 // 调用: 可以在任意需要位置上调用执行代码 // 函数的定义/函数的封装 // 函数的定义/封装 有固定的语法形式 /* function 函数名称(函数的参数){ 函数的代码; return 内容; } function 定义函数/封装 的关键词,作用类似于 关键词var 告诉计算机程序,我正在封装的是一个函数 函数名称 也就是这个函数的名称,之后调用函数时,是通过函数名称来调用函数,并且执行函数 函数的参数 执行函数时,输入给函数的数据信息 函数的代码 定义在{}中的程序,是函数执行时,调用的程序内容 return 函数的返回值; // 函数的封装/函数的定义 // 函数封装时,程序并没有被执行,只有在函数调用时,程序才会被执行 function fun(){ console.log(123); } // 函数的调用和执行 fun(); // 1,定义函数阶段,只是将程序定义在函数内,程序并没有执行 // 是有在调用函数时,封装在函数内部的程序,才会被执行 // 2,函数命名的规范 --- 与变量的命名规范相同 // 规则 : 只能使用 数字,字母,下划线_,美元$ // 不能以数字开头 // 区分大小写 // 规范 : 见名知意 // 驼峰命名法 // 3,所谓的封装,就是将程序,放在 函数的 { } 中,就是函数程序的封装 // 4,函数的调用 // 调用执行执行,必须使用函数的固定语法, 函数名称() 的方式来调用函数

    函数的定义方式 // 1,声明方式 // 通过关键词,function 来定义和声明函数

    // 封装函数,但是函数不会执行 // 也就是我现在组装好了一个微波炉,但是就放在那儿没有用 function fun1(){ console.log('我是声明方式定义的函数1'); }

    // 2,匿名函数 / 赋值方式

    // 定义函数时,不定义函数,名称,将函数赋值给一个变量 // 然后通过调用变量名称()的形式来调用函数 var fun2 = function(){ console.log('我是匿名函数,也叫赋值方式,定义的函数'); }; // 调用时,是通过变量名称()来调用函数 // fun2();

    // 函数的基本封装步骤

    // 1,定义程序来实现功能的需求 // 2,定义函数,将程序放在{}中,封装程序 // 3,定义参数 // 4,定义返回值 // 5,考虑容错机制 // 函数的执行,对于参数是要有要求的,如果参数出现问题 // 要么终止程序的执行,要么对参数进行处理 // 方式1: 使用return来终止函数的执行 // 在switch判断和循环语句中,可以使用break来终止程序 // 在函数中药终止函数的执行,不能使用break // 需要使用return关键词; // 方式2: 对数据进行调整 // 6,考虑函数参数的默认值 // 7,给函数定义函数说明 // 代码规范中规定,所有的自定义函数,都要写函数说明 // 每个公司对于函数说明的语法规范都不相同,我们现在先了解一个基本格式

    预解析

    <script> // JavaScript的预解释/预解析 // JavaScript 是 弱类型 解释型 的 脚本语言 // JavaScript 是 解释型 计算机语言 在 程序执行之前,会先将定义的程序,预先解释,也就是预先模拟执行一遍 // 会找程序中的关键词 var function 两个关键词 // 先输出 // 如果是没有使用 var 关键词声明的变量,执行结果是会报错 // 如果使用 var 关键词声明的变量,执行结果是 undefined // 如果是报错,之后的所有程序,都不会执行 // 如果是 undefined 之后程序还可以继续执行 // 实际项目中,会有这样提前使用变量的操作 // 如果不是使用 var 声明的变量,会报错,整个程序就无法进行了 console.log(int); // 后定义变量 var int = 100; console.log('我是之后的其他程序'); fun(); function fun(){ console.log(123); } // 这个效果,也就是使用var 定义的 变量,可以先调用,结果是undefined,不会报错 // 使用 function 声明的 函数,可以先调用,后执行,能正常调用函数 // 都是JavaScript程序,预解释/预解析的结果 // JavaScript中,预解释/预解析,操作原理 // 预先读取JavaScript中的所有程序内容,找到所有 var 和 function 关键词 来进行预解释和预解析 // 告诉计算机程序,有哪些变量是使用 var 关键词声明 // 如果提前使用 var 声明的变量,告诉计算机程序,这个变量已经存在,只是当前没有赋值,执行结果是undefined,不会报错 // 如果是使用function 声明的函数,告诉计算机程序,这个函数已经存在 // 并且告诉计算机这个函数的内存地址,可以正常调用使用,这个函数 </script>

    变量的作用域

    <script> // 变量的作用域 // 什么叫变量的作用域? // 所谓的变量的作用域,就是变量的使用范围 // 每一个变量都有自己的使用范围 // 就好像 Q币 只能在QQ商城中使用 // 王者荣耀的金币,只能在王者荣耀的商城中使用 // 变量的作用域分为两种 // 1,定义在函数之内的变量 // 包括函数的参数,定义在函数内部的变量,都称为局部作用域变量 / 局部变量 // 只能在函数内容部使用,如果外部想要直接调用,是不行的 // 此时函数中定义的变量,参数a和变量b,都是局部作用域变量 // 只能在函数内部被调用使用 // 函数外部不能直接使用调用 // 只要是在函数外部,调用函数内部的变量,都是报错 function fun1(a){ var b = 100; console.log(a,b); // 函数内部调用 } // fun1('北京'); // console.log(a,b); // 函数外部调用, // 2,定义在函数之外的变量,称为全局作用域变量/全局变量 // 在函数的内部是可以使用,全局作用域变量的,但是是有条件的 var int = 100; function fun2(){ console.log(int); } fun2(); // 总结: // 在函数外部,不能直接调用函数内部定义的局部作用域变量 // 在函数内部,可以调用函数外部的全局作用域变量,但是是有条件的

    // 变量的赋值原则 // 先在当前作用域中找变量,如果有,就对这个变量进行赋值 // 如果当前作用域没有这个变量,去父级作用域找这个变量 // 如果父级也没有这个变量,再去父级找变量 // 如果所有的作用域都没有这个变量 // 赋值语句,升级为定义变量语句,并且定义的是全局作用域变量 // 不会去子级找变量赋值

    // 记住一句话: 定义变量,一定要写 var 关键词,不管是局部还是全局 </script>

    递归函数

    // 什么是递归函数 // 是一种特殊的函数,就是在函数内部,调用函数自己本身 /* function fun1(){ 在函数fun1中调用函数fun1自己本身 fun1() } */ function fun(num){ num--; if(num >=1){ fun(num); } // 将执行的输出,写在递归调用之下 console.log(num); } fun(5); // 总结: // 1,调用递归函数,一定要有条件,无条件的调用递归函数,会一直执行调用,不会停止 // 2,调用递归函数,进入递归函数,会由外至内执行,结束递归函数,会从内至外执行 // 我们去理解递归,先看递归的终止 // 之后,在理解,其他情况下,是如何调用自己本身 // 每次调用递归函数本身,参数一定是不同的 // 要慎用递归 // 递归执行时会,定义大量的函数,这些函数函数会占用内存空间,消耗程序的执行效率 // 简单的业务逻辑,比价少的计算次数,也就是递归调用次数 // 实际项目中,前端业务,很少使用递归
    Processed: 0.018, SQL: 8