JS-函数(调用返回值)-形参实参-作用域

 2023-09-10 阅读 26 评论 0

摘要:JS- 函数-形参实参-作用域 1 回顾 数组 1. 什么是数组值的有序集合数组中的每个成员称之为元素元素具有位置,称之为索引索引从 0 开始,必须是连续的2. 声明数组三种方式① 数组直接量 []② Array() 函数③ Array() 构造函数3. 数组元素的读写[] 和 索引4. 稀疏数

JS- 函数-形参实参-作用域

1 回顾 数组

1. 什么是数组值的有序集合数组中的每个成员称之为元素元素具有位置,称之为索引索引从 0 开始,必须是连续的2. 声明数组三种方式① 数组直接量 []② Array() 函数③ Array() 构造函数3. 数组元素的读写[] 和 索引4. 稀疏数组
5. 遍历数组
6. 数组元素的添加和删除6.1 添加数组元素① 指定下一个索引,利用 length② push()③ unshift()④ splice()6.2 删除数组的元素① 修改 length② pop()③ shift()④ splice()7. 多维数组8. 字符串的数组特性

2 函数

2.1 函数概述

① 什么是函数

  • 函数是具有特定功能的代码块。
  • 在 JavaScript,函数也是一种数据类型,属于对象类型,使用 typeof 判断函数返回 function。

② 函数的作用

  • 函数可以被调用多次,提高代码的重用性。
  • 可以把整个代码项目,通过函数模块化。
  • 封装代码,让函数内部的代码对外部不可见。

③ 函数的组成

  • 函数名
  • 参数
  • 函数体
  • 返回值

2.2 声明函数的三种方式

① function 关键字方式

function 函数名([参数列表...]) {函数体语句...;   
}var fn03 = function() {console.log('天气晴朗');}fn03();

② 表达式方式

var 函数名 = function([参数列表...]) {函数体语句...;
}// 表达式方式 定义带参数的函数var fn04 = function(name,age) {console.log('我叫' + name +',年纪 '+ age+'')}fn04('王',25);

③ Function 构造函数方式(了解)

var 函数名 = new Function('函数体语句...');
var 函数名 = new Function('参数1', '参数2', '参数3', '函数体语句...');
var 函数名 = Function('函数体语句...');
var 函数名 = Function('参数1', '参数2', '参数3', '函数体语句...');// Function 构造函数方式var fn05 = new Function('console.log("我是fn05")');var fn06 = Function('name', 'age', 'console.log(name, age)');fn05();fn06('王', '25');

2.3 函数的调用和返回值

① 函数调用

  • 函数名的后面加括号,才是函数的调用,函数中的语句才可以执行。
  • 函数名后面没有括号,函数不会被调用,函数中的语句也不会执行。

② 返回值

  • 函数调用表达式(函数名+括号)的值是函数的返回值。

  • 在函数体内部,使用 return 关键字可以设置返回值,需要在 return 的右边写个表达式(表达式的值就是函数返回值)。

  • 如果函数中没有 return 或者 return 的右边没有表达式,函数默认返回 undefined。

  • return 关键字除了可以设置函数的返回值,还可以结束函数的执行,执行了 return 之后,函数体内 return 后面的代码就不会执行。

    		// 函数的返回值function demo () {console.log(100);//return 100*7;}var v3 = demo();  jconsole.log(v3);  //undefined,有return 7000demo ();          //100
    
    // 定义函数function fun() {console.log('天气晴朗');return;console.log('万里无云');}fun();   //天气晴朗
    
    // return和输出的区别function fu (n1,n2) {return n1 + n2;}console.log(fu(100,200));   //300
    
    素数判断
    function isPrime(num) {// 从2开始到num-1,一次去整除numfor (var i = 2;i < num-1; i ++) {// 如果有一个能被整除,不是素数了if (num % i === 0) {return false}}// 如果能够执行到这里return true;  }console.log(isPrime(197));  //tureconsole.log(isPrime(100));  //false// 输出100-200之间的素数for (var i = 100;i <= 200; i ++) {if(isPrime(i)) {console.log(i);}}
    

2.4 函数的参数

① 形参和实参

形参: 定义函数的时候所设置的参数,形参就像没有赋值的变量, 形参的形式必须以变量名形式给出。

实参: 调用函数给的参数,用于给实参赋值,实参的形式可以是变量、直接量、表达式。

② 形参和实参的数量问题

  1. 设置了多个形参,调用函数的时候就给多少个实参。

  2. 如果实参的个数比形参多,实参按照顺序依次给形参赋值,多余的实参就没有用了。

  3. 如果实参的个数比形参少,实参按照顺序依次给形参赋值,后面的形参没有对应的实参,默认赋值为 undefined。

    		// 调用函数,实参的数量<形参fn('王');    //我叫王,undefined
    

③ 形参的默认值(可选参数)

ES5 中给形参设置默认值的方式:

function 函数名(参数1,参数2) {if (参数2 === undefined) {参数2 = 默认值;}
}

ES6 中给形参设置默认值的方式:

function 函数名(参数1,参数2=默认值) {}

注意: 有默认值的形参一定要放在后面。

④ arguments

  1. arguments 只能在函数内使用,arguements 是系统定义好的变量。
  2. arguments 可以得到调用函数时给的所有的实参。
  3. arguments 是一个类数组(不是真正的的数组),可以通过索引读取其中的成员,具有 length 属性得到长度,可以使用 for 循环遍历里面的成员。
  4. JavaScript 函数中获取实参,可以通过设置形参,也可以通过 arguments。
// 定义函数,计算所有参数的和function sum()  {var res = 0;for (var i = 0;i < arguments.length; i ++) {res += arguments[i]}return res}console.log(sum(1,2,3))

2.5 作用域

① 变量的作用域

变量的作用域: 变量的可作用范围。根据变量的作用域,可以把变量分为全局变量局部变量

全局变量: 在函数外边定义的变量就是全局变量,全局变量的作用域是全局。

局部变量: 在函数内定义的变量就是局部变量,局部变量的作用域是所在的函数。

注意实现:

  1. 形参是局部变量,作用域是所在的函数。
  2. 函数名本质上是变量名,所以说函数本身也具有作用域。

② 作用域链

  1. **什么是作用域链:**函数的嵌套可以形成作用域链。
  2. 作用域链的作用: 作用域链描述变量的查找过程。 使用变量的时候,先从本作用域查找有没有声明该变量,如果没有去上层作用域查找,有就停止查找,没有继续向上层作用域查找,一直到全局作用域,如果都没有报错。
  3. 作用域链只与函数声明的位置有关系,与函数调用的位置无关!
		// 定义全局变量var username = '芳芳';// 声明函数function fn() {console.log('fn函数:', username);}// 声明函数function func() {// 定义变量var username = '大悲';// 调用 fn 函数fn();}// 调用 func()func();

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/3/40167.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息