欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JS基础day03-函数上

程序员文章站 2024-03-17 16:34:46
...

JS基础day03-函数上

函数定义

  • 定义阶段就是我们把代码 放在盒子里面
  • 我们就要学习怎么 放进去,也就是书写一个函数
  • 我们有两种定义方式 声明式 和 赋值式

声明式

直接用function关键字声明

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

赋值式

首先用var定义一个变量,然后将函数当做值赋值给这个变量

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

函数调用

调用上的区别

  • 虽然两种定义方式的调用都是一样的,但是还是有一些区别的
  • 声明式函数: 调用可以在 定义之前或者定义之后
// 可以调用
fn()

// 声明式函数
function fn() {
  console.log('我是 fn 函数')
}

// 可以调用
fn()
  • 赋值式函数: 调用只能在 定义之前
// 会报错
fn()

// 赋值式函数
var fn = function () {
  console.log('我是 fn 函数')
}

// 可以调用
fn()

函数的参数(重点)

  • 参数分为两种 行参 和 实参,以声明式函数为例
 // 声明式
function fn(行参写在这里) {
  // 一段代码
}

fn(实参写在这里)

行参和实参的作用

行参

  • 就是在函数内部可以使用的变量,在函数外部不能使用
  • 每写一个单词,就相当于在函数内部定义了一个可以使用的变量(遵循变量名的命名规则和命名规范)
  • 多个单词之间以 逗号 , 分隔
  • 形参与实参是从左到右一一对应的,对应不到的形参为undefined;或者多传递的实参不能使用
// 书写两个参数
function fun(num1, num2) {
  // 在函数内部就可以使用 num1 和 num2 这两个变量
}

//实参数量多于形参
fun(num_1,num_2,num_3)
function fun(num1, num2) {
  // num1=num_1,num2=num_2;
}

//形参数量多于实参
fun(num_1,num_2,num_3)
function fun(num1, num2) {
  // num1=num_1,num2=num_2;num3=undefined;
}

预解析

  • js 是一个解释型语言,就是在代码执行之前,先对代码进行通读和解释,然后在执行代码
  • 也就是说,我们的 js 代码在运行的时候,会经历两个环节 解释代码 和 执行代码

解释代码

  • 因为是在所有代码执行之前进行解释,所以叫做 预解析(预解释)
  • 需要解释的内容有两个
    -声明式函数
    -var 关键字

简单来说就是,所有的function和var关键字声明的函数和变量,会被提到当前整个代码的最前端

//正常代码书写
<script>       
		   document.write('hello world');
           document.write(a);
           document.write(b);//由于没有声明b变量,所以这行代码会报错,但是为什么打印a也不会报错呢?而且更奇怪的是,a的值为什么不为10?
           var a = 10;
           fun();
           function fun(){
            document.write('我是一个函数');
           }       
 </script>
 
//预解析后可以变形为
<script>   
		    var a;  
		    function fun(){
           	 document.write('我是一个函数');
           }      

		   document.write('hello world');
           document.write(a);//因为预解析,所以打印a不会报错,但是赋值并不会提前,所以打印出来的a的值为undefined
           document.write(b);//由于没有声明b变量,所以这行代码会报错
           a = 10;
           fun();
 </script>
  • 预解析就可以解释为什么声明式函数可以在声明之前调用,赋值式函数不能的原因,而且声明式函数的预解析是包括代码块一起的。
  • 值得注意的是,var的预解析是在function关键字之前的
相关标签: js入门 js