当前位置: 移动技术网 > IT编程>开发语言>JavaScript > js中常用数据类型(2)-函数

js中常用数据类型(2)-函数

2020年07月17日  | 移动技术网IT编程  | 我要评论

函数(function)

函数的定义

函数作为常用数据类型中的复杂类型,一般我们可以把它理解成一个‘盒子’。当我们需要用它时直接调用就可。

函数的运用

对于函数运用,我们主要分成两个阶段,他们分别是:函数的定义阶段函数的调用

1.函数的定义阶段

声明式

 function fn() {
    // 一段代码
  }

赋值式

 var fn = function () {
    // 一段代码
  }

2.函数的调用

声明式

function fn() {
    console.log('我是 fn 函数')
  }
  
  // 调用函数
  fn()  //调用时也可用于定义函数前面

赋值式

var fn2 = function () {
    console.log('我是 fn2 函数')
  }
  
  // 调用函数
  fn2()  //调用时不能放于定义函数前面(会报错)

函数的参数

函数的参数主要分为形参实参
形参:定义函数时放于括号中,以‘,’隔开
实参:调用函数时放于括号中,以‘,’隔开

  function fn(形参1,形参2...) {
    // 一段代码
  }
  
  fn(实参1,实参2....)
  
  // 赋值式函数
  var fn = function (行参1,形参2...) {
    // 一段代码
  }
  fn(实参1,实参2...)

对于参数个数问题
1.形参个数大于实参个数
遵循一 一对应原则,实参多余的个数忽略不计,用不到。

function fn(num1, num2) {
       // 函数内部可以使用 num1 和 num2
     }
fn(100, 200, 300) //300用不到

2.实参个数大于形参个数
先遵行一 一对应原则,然后形参多出来的,以undefined处理

function fn(num1, num2, num3) {
       // 函数内部可以使用 num1 num2 和 num3
       //其中num3的值就是undefined
     }
     fn(100, 200)

函数中return

return 返回的意思,在函数中,常见两种:返回值终断函数

返回值

 function fn() {
    // 执行代码
    //return 100; 当输入时,输出值为100。若没有return输入,则输出undefined
  }
  
  // fn() 是一个表达式,这个表达式就没有结果出现
  console.log(fn()) // undefined

终断函数

  • 当我开始执行函数以后,函数内部的代码就会从上到下的依次执行

  • 必须要等到函数内的代码执行完毕

  • return 关键字就是可以在函数中间的位置停掉,让后面的代码不在继续执行

  function fn() {
    console.log(1)
    console.log(2)
    console.log(3)
    
    // 写了 return 以后,后面的 4 和 5 就不会继续执行了
    return
    console.log(4)
    console.log(5)
  }
  
  // 函数调用
  fn()   //结果为1,2,3

预解析

  • js 是一个解释型语言,就是在代码执行之前,先对代码进行通读和解释,然后在执行代码
  • 也就是说,我们的 js 代码在运行的时候,会经历两个环节 解释代码执行代码
    **需要解析的内容有两个**
    1. 声明式函数
    在内存中先声明有一个变量名是函数名,并且这个名字代表的内容是一个函数
    2.var 关键字
    在内存中先声明有一个变量名

例如

 fn()
  console.log(num)
  
  function fn() {
    console.log('我是 fn 函数')
  }
  
  var num = 100

解析后

 function fn() {
    console.log('我是 fn 函数')
  }
  var num
  
  fn()
  console.log(num)
  num = 100

总结过程:

1.把变量的声明提升到当前作用域的最前面,只会提升声明,不会提升赋值。
2.把函数的声明提升到当前作用域的最前面,只会提升声明,不会提升调用。
3.先提升var,在提升function。

作用域

由于变量并不是在所有地方都能用,所以作用域产生了。
作用域主要分全局作用域局部作用域

全局作用域

==>全局作用域是最大的作用域
==>在全局作用域中定义的变量可以在任何地方使用
==>页面打开的时候,浏览器就会自动给我们生成一个全局作用域window
==>这个作用域会一直存在,直到关闭页面就销毁了
==>在函数内部不使用var定义的变量是全局作用域
例如:

var num = 100; 
var age = 12;

其中num,age就是全局作用域,在任何地方都能用。

局部作用域

==>局部作用域就是在全局的作用域下面又开辟出来的一个相对小一些的作用域
==>在局部作用域中定义的变量只能作用在这个局部作用内部使用
==>在js中只有函数能生成一个局部作用域,别的都不行
==>每一个函数,都是一个局部作用域
例如:

function fn(){
    //下面这个变量就是一个fn局部作用域内部的变量,只能在fn函数内部使用
    var num2 = 200;
    //在函数内部不使用var定义的变量是,全局作用域
   num1 = 340;
 }
 fn();//调用函数fn,fn里面的代码就运行了
 // console.log(num2);//报错:num2 is not defined
 console.log(num1);

预解析与作用域举例

f1();
        console.log(c); //9
        console.log(b); //9
        console.log(a); //a is not defined
   function f1() {
            var a = b = c = 9;
            console.log(a); //9
            console.log(b); //9
            console.log(c); //9
        }

分析

第一步:预解析

 function f1() {
			var a = b;
            c = 9;
			b=c;
            console.log(a); 
            console.log(b); 
            console.log(c); 
        }
        f1();
        console.log(c); 
        console.log(b); 
        console.log(a);

第二步:执行

  • 当运行到**f1()时,通过f1()**执行函数,此处函数里面的代码才开始执行。
  • 其中c没有使用var定义,所以他是一个全局变量,b也没有使用var定义,所以他也是一个全局变量,a使用了var定义,并且在函数里面,所以他是一个局部作用域。
  • 此时到了函数的外面,那么函数里面定义的局部变量就无法使用了
  • 故:
console.log(c);   //9
console.log(b);   //9
console.log(a);  //a is not defined

总结

复杂数据类型-函数已经写完,后续还将更新数组对象等类型。有错误,望大家积极指正!!!

本文地址:https://blog.csdn.net/weixin_44012141/article/details/107360506

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网