宝哥软件园

在JS各种场景下谈这个方向

编辑:宝哥软件园 来源:互联网 时间:2021-08-20

为了保证可读性,本文采用意译代替直译。

如果你想看更多高质量的文章,请戳GitHub博客,每年都有上百篇高质量的文章等着你!

1.这其中的奥秘

很多时候,JS中的这一点对于我们的初学者来说非常困惑。这是非常强大的,但需要一些努力才能慢慢理解。

对于Java、PHP或其他标准语言,这表示类方法中当前对象的一个实例。在大多数情况下,这不能在方法之外使用,因此不太容易混淆。

在j市,情况就不同了。这表示函数的当前执行上下文,在JS中调用函数有几种方法:

该函数调用:报警(' Hello World!')方法调用: console.log('Hello World!')构造函数3360new regexp (' d ')隐式调用:alert.call(未定义,“hello world!”每种调用类型都以自己的方式定义上下文,所以很容易混淆。

此外,严格模式也会影响执行上下文。

理解这一点的关键是清楚地知道函数调用以及它如何影响上下文。

本文主要解释了函数是如何被调用的,以及它是如何影响函数的,并解释了执行上下文的常见陷阱。

开始之前,请了解几个术语:

调用函数是执行代码来创建函数体,或者只是调用函数。例如,parsent函数调用是parsent(' 15 ')。

函数调用:执行构成函数主体的代码:例如,parsent函数调用是parsent(' 15 ')。调用上下文:指这个在函数体中的值。例如,map.set的调用上下文(“键”、“值”)是map。函数范围:它是函数体中可访问的变量、对象和函数的集合。2.函数调用

当表达式是一个后跟一个的函数(一些参数用逗号和一分隔)时,会执行一个函数调用,例如parsent(' 18 ')。

函数调用表达式不能是属性调用,例如obj.myFunc(),它用于创建方法调用。再比如[1,5]。join(',')不是函数调用,而是方法调用。记住这一区别很重要。

函数调用的一个简单例子:

函数hello(name) {返回' Hello ' name '!';}//函数调用const message=hello(' World ');console.log(消息);//='你好,世界!'Hello('World ')是一个函数调用。 hello表达式相当于一个函数,后面跟一对括号和‘World’参数。

一个更高级的例子是IIFE(立即称为函数表达式)

const message=(函数(名称){返回' Hello ' name '!';})(“世界”);console.log(消息)//='Hello World!'IIFE也是一个函数调用:第一对括号(函数(名称){ 0.})是一个表达式,它的计算结果是一个函数对象,后面跟一对圆括号。括号的参数是“世界”。

2.1.这在函数调用中

这是函数调用中的全局对象。本地对象由执行环境决定。在浏览器中,这是一个窗口对象。

在函数调用中,执行上下文是一个全局对象。

让我们看看以下函数中的上下文是什么:

函数sum(a,b){ console . log(this===window);//=true this . mynumber=20;//将‘myNumber’属性添加到全局对象返回a b;}//sum()作为函数调用//这个' in sum()是一个全局对象(window)sum(15,16);//=31 window . mynumber;//=20当调用sum(15,16)时,JS自动将其设置为全局对象,在浏览器中为window。

当在任何函数范围(顶级范围:全局执行上下文)之外使用时,这表示一个窗口对象

console.log(此===窗口);//=true this . MyString=' Hello World!';console . log(window . MyString);//='你好,世界!'!在一个html文件中

更多资讯
游戏推荐
更多+