上一节我们深入学习了JS函数参数的arguments对象,本节我们将深入学习调用JS函数的4种方式:

1. 最简单的方式,作为一个函数被调用:

/*作为一个函数被调用*/
function f()
{
  console.log('Hello JS!');
  
}
f();//输出“Hello JS!”

2.方法调用:将函数作为对象的方法进行调用。

const obj = {
brand:"Dotcpp编程",
address:"dotcpp.com",
f(){
  console.log(`${this.brand}:${this.address}`);
}
}
obj.f();//打印“Dotcpp编程:dotcpp.com”

3.构造函数调用:使用new关键字创建对象实例时,会自动调用构造函数。

/*作为构造器调用*/
function dotcpp_user(name,age,grade)
{
  this.name=name;
  this.age=age;
  this.grade=grade;
}
const user01=new dotcpp_user('user01',18,100)
const user02=new dotcpp_user('user02',18,100)
const user03=new dotcpp_user('user03',18,100)
console.log(user01);//dotcpp_user {name: 'user01', age: 18, grade: 100}
console.log(user02);//dotcpp_user {name: 'user02', age: 18, grade: 100}
console.log(user03);//dotcpp_user {name: 'user03', age: 18, grade: 100}

4.间接调用:使用call()或apply()方法来间接调用函数,并指定函数内部的this值。

/*通过apply、call来更改this指向,进行speak函数的不同输出*/
const JS = { course: "JS" };
const CPP = { course: "C++" };
const Java = { course: "Java" };

function speak() {
  console.log(this.course);
}

speak.call(JS);    // 输出: JS
speak.apply(CPP);  // 输出: C++
speak.call(Java);  // 输出: Java

在JS函数调用过程中,还有一些特殊的情况需要注意:

1.如果没有明确指定this值,严格模式下函数内部的this将为undefined,非严格模式下this将指向全局对象(浏览器环境下为window)。

2.函数可以接收参数,在调用时传递给函数。

3.函数可以返回值,调用时可以接收函数的返回值。

JS中函数调用时需要注意一些常见的问题,下面我们通过表格展示:

情景描述
函数名的拼写确保函数名的拼写是正确的,否则会导致函数未定义或找不到的错误
函数参数的传递根据函数定义的参数列表,确保正确传递参数。参数的数量、类型和顺序都应与函数定义相匹配,否则可能导致函数执行错误或产生意外结果
上下文对象(this)的指向对于函数调用中涉及上下文对象(如方法调用、间接调用),需要确保函数内部的this指向正确。可以使用call()、apply()或箭头函数来显式指定this的值,或者通过绑定函数来固定函数的上下文
异步函数的处理如果要调用异步函数(例如带有回调函数或返回Promise的函数),需要适当处理异步操作的结果,例如使用.then()或async/await等方式来处理返回值或错误
函数返回值的处理函数可能会返回一个值,需要根据需要接收并处理该返回值。可以将返回值赋给变量,或直接在调用语句中使用返回值
函数作为参数传递JavaScript中函数可以作为参数传递给其他函数,这被称为"高阶函数"。在调用接收函数参数的函数时,需要确保传递正确的函数引用,并根据需要传递其他参数
函数的执行时机函数调用并不总是即刻执行,有些函数可能在事件触发、异步操作或定时器等条件满足后才会被调用。因此,需要注意函数的执行时机,以确保在正确的时间调用函数

总结:本节我们详细介绍了如何调用JS中的函数,同时分析了JS函数调用的常见错误,希望读者养成合法调用函数的习惯。

点赞(82)

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

Dotcpp在线编译      (登录可减少运行等待时间)