设为首页 - 加入收藏 ASP站长网(Aspzz.Cn)- 科技、建站、经验、云计算、5G、大数据,站长网!
热搜: 创业者 手机 数据
当前位置: 首页 > 运营中心 > 建站资源 > 优化 > 正文

7 个常见的 JavaScript 测验及解答

发布时间:2019-11-01 17:15 所属栏目:21 来源:疯狂的技术宅
导读:我相信学习新事物并评估我们所知的东西对自己的进步非常有用,可以避免了我们觉得自己的知识过时的情况。在本文中,我将介绍一些常见的 JavaScript 知识。请享用! 1.声明 查看以下代码,并回答输出的内容(以及原因)。 //situation1 console.log(person); v

我相信学习新事物并评估我们所知的东西对自己的进步非常有用,可以避免了我们觉得自己的知识过时的情况。在本文中,我将介绍一些常见的 JavaScript 知识。请享用!

7 个常见的 JavaScript 测验及解答

1.声明

查看以下代码,并回答输出的内容(以及原因)。

  1. // situation 1 
  2. console.log(person); 
  3. var person = 'John'; 
  4.  
  5. // situation 2 
  6. console.log(person); 
  7. let person = 'Phill'; 
  8.  
  9. // situation 3 
  10. console.log(person); 
  11. const person = 'Frank'; 
  12.  
  13. // situation 4 
  14. const person = 'Vanessa'; 
  15. console.log(person); 
  16. person = 'Mike'; 
  17. console.log(person); 
  18.  
  19. // situation 5 
  20. var person = 'John'; 
  21. let person = 'Mike'; 
  22. console.log(person); 
  23.  
  24. // situation 6 
  25. var person = 'John'; 
  26. if (person) { 
  27.   let person = 'Mike'; 
  28.   console.log(person); 
  29. console.log(person); 

说明

Situation 1: 预期结果是在控制台中看到文本 John,但是令人惊讶的是,我们看到记录了undefined。想知道为什么吗?

好吧,这是经典的 JavaScript 在起作用。这种行为被称为提升。在后台,该语言将变量声明和值分配分为两部分。不管变量最初由开发人员在哪里声明,变量都将移动到顶部,声明时将其值设置为 undefined。看起来像这样:

  1. var person; 
  2. console.log(person); 
  3. person = 'John'; 

Situation 2: 在这里,结果将是引用错误。

  1. Uncaught ReferenceError: Cannot access 'person' before initialization 

错误文本说明了一切。因为我们使用了关键字 let,所以我们的变量被提升,但没有初始化,并且抛出该错误,通知我们正在尝试访问未初始化的变量。在 ES6 中引入了关键字 let,使我们能够使用块作用域中的变量,从而帮助我们防止意外行为。

在这里,我们会得到与 Situation 2 中相同的错误。

不同之处在于我们使用了关键字 const,从而防止在初始化后重新分配变量。 ES6 中也引入了此关键字。

Situation 4: 在这种情况下,我们可以看到关键字 const 是如何工作的,以及它如何避免无意中重新分配变量。在我们的示例中,首先会在控制台中看到 Vanessa,然后是一个类型错误。

  1. Uncaught TypeError: Assignment to constant variable 

const 变量的使用随着我们的代码库呈指数增长。

Situation 5: 如果已经在某个作用域内使用关键字 var 定义了变量,则在同一作用域中用关键字 let 再次声明该变量将会引发错误。

因此,在我们的示例中,将不会输出任何内容,并且会看到语法错误提示。

  1. Uncaught SyntaxError: Identifier 'person' has already been declared 

Situation 6: 我们分别有一个函数作用域的变量,和块作用域的变量。在这种情况下,它们是否有相同的名字或标识符并不重要。

在控制台中,我们应该看到 Mike 和 John 被依次输出。为什么?

因为关键字 let 为我们提供了块作用域内的变量,这意味着它们仅存在于自己创建的作用域内,在这种情况下,位于if...else 语句中。内部变量优先于外部变量,这就是为什么我们可以使用相同标识符的原因。

2.继承

考虑以下类,并尝试回答输出了什么以及为什么。

  1. class Person { 
  2.   constructor() { 
  3.     this.sayHello = () => { 
  4.       return 'Hello'; 
  5.     } 
  6.   } 
  7.  
  8.   sayBye() { 
  9.     return 'Bye'; 
  10.   } 
  11.  
  12. class Student extends Person { 
  13.   sayHello() { 
  14.     return 'Hello from Student'; 
  15.   } 
  16.  
  17. const student = new Student(); 
  18. console.log(student.sayHello()); 

说明

如果你的答案是 Hello,那是对的!

为什么:每次我们创建一个新的 Student 实例时,都会将 sayHello 属性设置为是一个函数,并返回字符串 Hello。这是在父类(Person)类的构造函数中发生的。

(编辑:ASP站长网)

网友评论
推荐文章
    热点阅读