2016年10月12日托福考试真题及答案(附答案)

头像| CSDN从东方IC下载

生产 | CSDN(ID:CSDNnews)

我是一种单线程、非阻塞、异步并发语言。

我有一个调用堆栈、一个事件循环、一个回调队列和其他一些 API。

—— JavaScript

您可以让应用程序获取 API。您的按钮使用全局状态。但是每当控制台中出现红色警告时,您都会为 Stack Overflow 哭泣。

使用框架构建产品非常方便。边做边学很酷。但是,由于缺乏深入的了解,您肯定会碰壁。

所以我报名参加了在线课程。

计算机如何理解 JavaScript

问题:您可以用 JavaScript 编写代码,但计算机无法理解。

让我们简化解决方案:

高级代码 -> 数据结构(树或图)

数据结构 -> 低级语言(机器码)

请不要将它与翻译混淆,翻译是一种从高级编程语言到另一种语言的语法转换,例如 TypeScript -> JS。

执行上下文是什么?

在了解 JavaScript 的操作之前,我们首先需要了解什么是执行上下文。

执行上下文是执行一段代码的环境。输入这个,你可以看到上下文信息。上下文的内容取决于你是否在函数内部,但它通常包含:

JavaScript 是如何工作的?

执行上下文分两个阶段执行:

创建阶段:为变量和函数建立内存空间。

代码执行阶段:逐行运行代码(详见下文)。

在创建阶段js中运算符的优先级,所有变量初始设置为undefined,函数完全在内存中。但请注意,“undefined”与“ReferenceError: my_var is not defined”不同,表示变量尚未分配内存空间。

事件循环和执行堆栈

程序运行时,会创建一个全局执行上下文;然后,每当一个函数被调用时,它的执行上下文被放置在执行堆栈的顶部。

请记住,JavaScript 是单线程的,这意味着它只有一个调用堆栈。此外,JavaScript 是同步的,这意味着每个命令都是按顺序执行的。

每个函数都会创建自己的执行上下文,这个上下文将贯穿创建和执行阶段。当栈顶的函数运行完毕后,它会被弹出。

了解作用域链

让我们来看看下面的一段代码:

函数 b() {console.log(myVar);function a() {var myVar = 2;b();var myVar = 1;a();

正确答案是 1. 为什么不是 undefined?

因为如果在当前执行上下文中没有定义一个变量,它会寻找外部环境(在上面的代码中,它是全局执行上下文)。作用域链是这个外部环境的参考链。

JavaScript 类型:基本没有类型

JavaScript 是一种动态类型,这意味着没有关键字来定义变量指向的数据类型。JavaScript 和 TypeScript 的主要区别在于这一点。TypeScript 是一种静态类型。

有哪些基本类型?

图片[1]-2016年10月12日托福考试真题及答案(附答案)-老王博客

原始类型是表示单个值的数据类型(不是键值对或对象)。

JavaScript 中有六种基本类型:

运营商有哪些?

运算符在语法上是不同的函数。通常运算符接受两个参数并返回一个结果。

与普通函数不同,操作符使用中缀表示法,即 3+4,而不是前缀表示法 +(3,4) 或后缀表示法 (3, 4)+.

什么是强制转换?

强制是指将值从一种类型转换为另一种类型,例如:

var a = 1 + ‘2’;

有时强制的行为可能非常奇怪:

控制台.日志(3

相等 (==) 将执行强制转换,而严格相等 (===) 不会:

console.log(Number(‘3’ == 3)); // truthyconsole.log(Number(‘3’ === 3)); // 假

换句话说,我们应该尽可能地使用严格相等,否则代码会表现出一些意想不到的行为。

最后,我们可以使用强制转换来检查是否定义了变量(但要注意零!)

if (a || a === 0) {console.log(“那里有一个。”);

JSON 和对象字面量

JSON 键需要使用引号,但对象不需要。因此,所有 JSON 都可以用作对象,但反之则不然。

但是由于两者非常相似,JavaScript 为 JSON 提供了许多内置功能:

对象字面量和构造函数

本质上js中运算符的优先级,{} 与 new Object() 相同,但使用文字创建的对象是全局的。构造函数允许我们创建对象的实例。

函数就是对象!

JavaScript 中的函数具有关键地位,这意味着函数可以被视为任何其他对象或类型(可以创建、传递等)。这就是 JavaScript 非常适合函数式编程的原因。

虽然,函数和对象的区别主要在以下两个方面指出:

当一个函数附加到一个对象上时,函数作用域中的this指向该对象,而匿名函数中的this指向它的创建者。

按值传递和按引用传递

最后,所有基本类型都是按值传递的,所有对象(包括函数)都是按引用传递的。

基本类型的值变量 a 位于内存中的某处(例如,0x001)。如果我们将一个新的 var b 传递给 var a,它将创建一个基本类型的值的副本 in内存中的另一个位置(例如,0x002)。这是一个值调用(即将该值复制到内存中的两个单独位置)。这意味着我们以后修改a时不会影响b .

但是,当我们复制对象变量时,新变量将指向内存中的相同位置(也称为引用):

a = 新对象();// 0x001b = a; // 0x001

总结

可怜的 JavaScript,他们都说你很奇怪。

这是不公平的,你不应该害怕。

有人理解你的古怪,他们会为你鼓掌。

其实你效率很高,没有太多缺点。

原文链接:

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论