Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >JavaScript 学习-23.函数调用4种方式

JavaScript 学习-23.函数调用4种方式

作者头像
上海-悠悠
发布于 2022-05-25 03:41:52
发布于 2022-05-25 03:41:52
48200
代码可运行
举报
运行总次数:0
代码可运行

前言

JavaScript 函数有 4 种调用方式, 每种方式的不同在于 this 的指向不一样。 在Javascript中 this 是保留关键字,一般而言,this指向函数执行时的当前对象。

函数调用

通常情况下我们可以用函数名称加圆括号()调用函数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function fun1(x, y,) {
    console.log(x+y);
    return x + y
}

fun1(5, 10);  // 15

当函数没有被自身的对象调用时 this 的值就会变成全局(window) 对象。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var color = 'red';

function fun1() {
    console.log(this);
    return this.color
}

console.log(fun1());  // 'red'

函数作为方法调用

定义object对象的方法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var person = {
    user: "yoyo",
    age: 50,
    address: function () {
        // do something...
        console.log(this);
        return this.user
    }
};
console.log(person.address())  // "yoyo"

实例中 this 的值为 person  对象

构造函数调用函数

如果函数调用前使用了 new 关键字, 则是调用了构造函数。 这看起来就像创建了新的函数,但实际上 JavaScript 函数是重新创建的对象

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 构造函数:
function myFunction(arg1, arg2) {
    this.user= arg1;
    this.age = arg2;
}

// new 
var x = new myFunction("yoyo", 20);
console.log(x.user)    // yoyo
console.log(x.age)    // 20

call() 和 apply() 方法调用函数

JavaScript 函数是对象, 函数有它的属性和方法。每个函数都包含两个属性:length和prototype prototype 下面有两个方法 apply(),call(),这两个方法都是函数非继承而来的方法,  是每一个函数都具有的方法。 这两个方法的用途都是在特定的作用域中调用函数(看this指向的作用域是谁),也就是说调用特定的对象下面调用函数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function func(x, y) {
    return x + y;
}

var res = func.call(this, 10, 20);
console.log(res);  // 30 
var res= func.apply(this, [10,20]);
console.log(res);  // 30

call()方法第一个同样是作用域,其余的参数是逐个传递给函数的,而不是传递一个数组过去。 apply()方法有两个参数,第一个是要执行这个方法的作用域,也就是传递一个对象过去,第二个参数是一个数组. 如果函数不需要传参,那么后面的参数是可以省略的。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var user = 'hello';
var person = {
    user: 'yoyo',
    age: 20
}
function myName(){
    return this.user;
}

console.log(myName());               //hello    this是window
console.log(myName.call(window));   //hello    this是window
console.log(myName.call(this));      //hello   this是window
console.log(myName.call(person));    //yoyo     this是person 
console.log(myName.call(null));      //hello    this是window

使用这apply()和call()这两个方法最大的好处是对象不需要与函数有耦合关系,也就是上面说的对象中可能不存在这个方法,但只要存在这个对象就行。

2022年第 11 期《python接口web自动化+测试开发》课程,6月5号开学!

2022年第 1 期《Python 测试平台开发》课程

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-05-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 从零开始学自动化测试 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
JS高级原型以及函数调用方式
Javascript 规定,每一个(构造)函数都有一个 prototype 属性,指向另一个对象。这个对象的所有属性和方法,都会被构造函数的实例继承。这也就意味着,我们可以把所有对象实例需要共享的属性和方法直接定义在 prototype 对象上,以便让同一类型的对象共享方法或其它成员
用户6256742
2024/06/13
1690
JS高级原型以及函数调用方式
你真的了解JS的函数吗?
如果function foo(){}是作为赋值表达式的一部分的话,那它就是一个函数表达式
Jou
2022/08/10
7380
面试题之:JavaScript中this以及apply/call/bind的用法
this 的 4 种绑定规则分别是:默认绑定、隐式绑定、显式绑定、new 绑定。优先级从低到高。
用户10106350
2022/10/28
2950
面试题之:JavaScript中this以及apply/call/bind的用法
JavaScript进阶教程(4)-函数内this指向解惑call(),apply(),bind()的区别
函数声明如果放在if-else的语句中,在IE8的浏览器中会出现问题,所以为了更好的兼容性我们以后最好用函数表达式,不用函数声明的方式。
AlbertYang
2020/09/08
6430
JavaScript进阶教程(4)-函数内this指向解惑call(),apply(),bind()的区别
掌握JavaScript中call()和apply()的精髓,让你的函数调用更加灵活高效
JavaScript 是一门非常强大的编程语言,它支持多种编程范式,包括面向对象编程。在 JavaScript 中,我们可以使用 call() 和 apply() 两个方法来调用函数并且改变函数的上下文。这两个方法在 JavaScript 中是非常常用的,但是很多新手对它们的理解还不够深入。在本文中,我们将详细介绍 call() 和 apply() 的区别与用法,帮助读者更好地理解它们。
Front_Yue
2023/12/21
1.9K3
掌握JavaScript中call()和apply()的精髓,让你的函数调用更加灵活高效
javascript 基础_JavaScript高级编程
1.分类: -基本类型 -String:任意字符串 -Number:任意的数字 -boolean: true/false -undefined:未定义 -null:空
全栈程序员站长
2022/09/24
1.6K0
javascript 基础_JavaScript高级编程
this,call,apply,bind(万字长文)
前言 大家好啊,我是吒儿?,每天努力一点点?,就能升职加薪?当上总经理出任CEO迎娶白富美走上人生巅峰?,想想还有点小激动呢?。 这是我的第13期文章内容✍,希望能够把每一处知识点,说明白,(当然,如
达达前端
2020/06/16
1.2K0
Web前端学习 第3章 JavaScript基础教程6 函数基础
函数是一个可执行的语句块,定义的时候不执行,调用的时候执行,使用"函数名()"的形式可以调用函数, 语法如下所示:
学习猿地
2020/06/16
3560
javascript——函数、变量和方法
当代码出现有规律的重复之后,可以利用函数,定义变量,调用方法,不用去重复的改动代码,只需要进行函数的修改。基本上所有的高级语言都支持函数,javascript也不例外,它可以像变量一样被使用,方便且强大,因此本文对js函数进行系统的学习,并在学习过程中做了详细的笔记以及样例。
子舒
2022/06/09
1.2K0
javascript——函数、变量和方法
JS与ES6高级编程学习笔记(二)——函数与作用域
开发者常戏称"函数是JavaScript中的一等公民",这足以体现了函数的重要性,为了更好的掌握函数我们需要学习函数的构造器Function等相关内容。
张果
2022/05/31
1.4K0
JS与ES6高级编程学习笔记(二)——函数与作用域
改变函数调用上下文:apply与call方法详解及实例
JavaScript 提供了很多方法来增强函数的灵活性,其中 apply 和 call 是两个重要的函数方法。了解它们的使用场景和区别可以帮助我们更好地管理上下文(this)并提升代码的可读性。
watermelo37
2025/01/22
920
改变函数调用上下文:apply与call方法详解及实例
JavaScript中的this指向哪?
this可以说是前端开发中比较常见的一个关键字,由于其指向是在运行时才确定,所以大家在开发中判断其方向时也会很模糊,今天就把this的指向问题拆开了,揉碎了,好好讲一讲。
归思君
2023/12/14
1850
JavaScript中的this指向哪?
JS高级——函数进阶
这些this的指向,是当我们调用函数的时候确定的,调用方式的不同决定了this的指向不同
岳泽以
2022/10/26
1.8K0
JS高级——函数进阶
前端基础-JavaScript函数进阶
这种写法将一个匿名函数赋值给变量。这时,这个匿名函数又称函数表达式(Function Expression)
cwl_java
2020/03/26
5540
JS中的this指向问题
可能会误以为window.doSth()是调用的,所以是指向window。虽然本例中window.doSth确实等于doSth。name等于window.name。上面代码中这是因为在ES5中,全局变量是挂载在顶层对象(浏览器是window)中。 事实上,并不是如此。
步履不停凡
2019/09/11
1.3K0
JavaScript进阶-04
异常处理是指预估代码执行过程中可能发生的错误,然后最大程度的避免错误的发生导致整个程序无法继续运行。
yuanshuai
2022/08/23
3210
前端day19-JS高级(函数调用的上下文模式)学习笔记
1.1复习函数三种调用方式:普通函数 对象方法 构造函数(理解this关键字作用:谁调用这个函数,this指向谁)
帅的一麻皮
2020/05/10
1.2K0
JavaScript中call,apply,bind方法的使用及原理
在JavaScript里,call(),apply(),bind()都是Function内置的三个方法, 它们的作用都是显示的绑定this的指向,三个方法的第一个参数都是this指向的对象,也就是函数在运行时执行的上下文。
伯爵
2019/10/18
1.1K0
JavaScript 学习-7.函数定义的几种方式
之前学习变量的时候,学到一个词:”声明提升”,函数声明也会被提升。 “hoisting(声明提升)”:函数声明和变量声明总是会被解释器悄悄地被”提升”到方法体的最顶部。
上海-悠悠
2022/05/17
9060
面试官问:JS的this指向
面试官出很多考题,基本都会变着方式来考察this指向,看候选人对JS基础知识是否扎实。读者可以先拉到底部看总结,再谷歌(或各技术平台)搜索几篇类似文章,看笔者写的文章和别人有什么不同(欢迎在评论区评论不同之处),对比来看,验证与自己现有知识是否有盲点,多看几篇,自然就会完善自身知识。
若川
2020/03/19
7730
相关推荐
JS高级原型以及函数调用方式
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档