深入了解Javascript的范围和上下文

深入了解Javascript的范围和上下文
总结

The implementation of the scope and context in Javascript is a unique feature of the Javascript language and, to some extent, the Javascript language is very flexible.The functions in Javascript can be used in a variety of contexts, and the scope can also be encapsulated and saved.It is because of these features that a lot of useful design patterns are provided in Javascript.However, the scope and context are also a place where Javascript programmers are often confused in development.

下面将向您展示Javascript中的范围和上下文的概念,以及它们之间的差异。

范围与语境

该解释第一重要的是,范围和规模都是不一样的概念,他们是不一样的东西。作为一个前端菜力,经常看到一些结果这两个概念的混乱,有些事情不明白,这两个概念似乎困惑了很长一段时间。因此,大量的信息被选中,这两个概念进行简要的说明:stuck_out_tongue_closed_eyes:

在Javascript中,当一个函数被调用时,有一个范围和上下文的功能结合在一起。从根本上讲,范围是基于功能和语境是基于对象的。换句话说,范围适用于变量的访问权限的功能,当调用函数时,通常指的是该关键词的价值,而这是一个参考,当前执行代码的对象。

变量范围

一个变量可以在本地或全球范围内定义的,称为局部变量和全局变量,分别为一个全局变量是一个变量声明在一个函数的函数和全局变量可以在程序的任何地方。局部变量是指在函数定义的变量,只能访问内部函数和嵌套函数,不能被外部访问功能。

Javascript目前不支持块级作用域(变量定义语句如,开关,等等)。这意味着变量定义在块外也可以阻止访问。然而,在6,我们可以使用let关键字定义的块级范围。

对于内容的范围,可以查其他信息,这部分内容比较简单。

这种情况下

上下文(上下文)通常取决于调用函数的方式。当函数的函数被称为对象时,这是指调用函数的对象。

复制代码代码如下所示:

var obj = {

函数(){

console.log(= obj);

}

};

Obj.foo(真); / /输出
类似地,当我们使用新关键字创建一个新对象时,这是指新创建的对象。

复制代码代码如下所示:

函数(){

console.log(本);

}

富(窗口); /输出

var obj =新(Foo); / /输出foo { }
需要注意的一点是,当调用全局作用域中的函数时,这是指全局对象。在浏览器环境中,它指的是窗口,但是,如果代码在严格的模式下运行,则设置为未定义。

执行上下文(执行上下文)

Javascript是一种单线程语言。也就是说,当Javascript在浏览器中运行时,它只能一次只做一件事,而其他事情将等待以队列的方式处理。

1。当Javascript代码文件被浏览器加载时,默认是全局执行上下文。当一个函数在全局上下文中调用时,程序就停留在调用函数中。此时,Javascript引擎为函数创建一个新的执行上下文,并将其按下到执行上下文堆栈的顶部。一旦执行,上下文将从堆栈顶部弹出,然后输入上下文执行代码。这样,堆栈中的上下文依次执行,并在返回到全局上下文之前弹出。

2。执行上下文可以分为两个阶段:创建阶段和执行阶段。在创作阶段,Javascript解释器首先创建一个变量对象(也是一个活动对象,活动对象)。活动对象由变量、函数声明和参数。在这个阶段,该函数的作用域链初始化,和这个对象的引用也被确定。下一个阶段是执行阶段,该代码是解释执行。

在Javascript代码中,您可以拥有任意数量的函数上下文,我们已经知道,当函数被调用时,Javascript解释器将创建一个新的上下文,范围也创建一个私有的,函数中声明的任何变量都不能直接在外部函数范围内访问。

三.通过以上的解释,我们有一个函数的执行上下文的一个基本概念,但它也是一个地方,每个人都是最容易混淆。在Javascript的执行上下文是主要的范围,不是在这样的背景下,上述第四个部分。有许多相似、容易混淆的概念在Javascript中,但我们会不如果我们只是澄清,每个概念是指特定对象的困惑。因此,我们希望您能在这里真正地区分执行上下文和上下文。

简单地说,执行上下文是与域相关的概念,尽管它可能不那么严格。

作用域链

对于每一个执行上下文,都有一个绑定到它的范围。范围链包含执行上下文活动对象(激活对象,这听起来有点旁路)在执行上下文堆栈中。

代码示例:

复制代码代码如下所示:

函数第一(){

第二();

函数第二(){

第三();

函数第三(){

第四();

函数第四(){

代码

}

}

}

}

第一();
上面的代码被执行,和嵌套函数的执行。至于上面的代码而言,形成一个作用域链,并从顶级域链底部的序列是:第四,第三,二,第一,全球第四。函数可以访问全球范围内的变量,和可以访问任何变量在函数定义的第三,二,和第一。

有一点需要注意的是,在函数中,本地变量的优先级高于相同名称的全局变量。如果变量和全局变量在函数或函数参数中包含本地变量中的语句,则全局变量由局部变量覆盖。

简单地说,每当我们试图访问一个变量时,程序就在当前函数的范围内寻找变量。如果找不到,它会沿着作用域链到函数的顶部查找它。在找到变量之前,如果找不到,我们将返回到未定义的位置。

总结

本文介绍了Javascript中的上下文和范围的概念,Javascript中有几个重要的概念,如闭包等,这些概念稍后将被写到文章中。

tag:上下文电脑软件Javascript

相关内容