Javascript基础知识小测试
Posted _wind
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Javascript基础知识小测试相关的知识,希望对你有一定的参考价值。
这里罗列了《你不知道的js》上卷的一些知识点以及小问题,如果你想巩固一下js那么就和我一起来看看吧。
如果你能不看书就回答上80%的问题说明你js的这一部分学得还不错,再接再厉。
作用域和闭包
词法作用域
- 变量赋值操作会执行的两个动作
- RHS 和 LHS 查询
- 在作用域顶层无法找到目标变量,在严格模式和非严格模式下有什么结果?
- with的副作用
- 匿名函数的三个缺点
- IIFE是什么
- JS的块作用域以及如何隐式模拟块作用域?
- let 和 var 在变量声明有什么区别?
- 提升(变量、函数有什么区别)
闭包
- 闭包产生的原理
1 function foo() {
2 function bar() {};
3 /*...*/
4 }
当函数可以记住并且访问所在的词法作用域时,就产生了闭包,即使函数是在当前词法作用域之外执行。
bar对foo内部作用域的引用就叫做闭包
- 闭包遇上for循环,问题、机制、解决办法(考虑let)
- 模块的两个必要条件
- import 和 module 的区别
this和对象原型
this
- 胖箭头 => 的作用原理
- this是运行时绑定还是编译时绑定?
- this的四个绑定及其原理
- 绑定的优先级
- 为什么setTimeout()中的this会默认绑定到window?
- 写一个硬绑定bind(obj, target);
- 硬绑定的优势
- 使用new调用函数时会发生的四个步骤?
对象
- js中的六个基本类型、六个内置对象
- 函数从来不会属于某一个对象
- get和set,get的函数名和函数值分别代表什么
- in 和 hasOwenPrototype 的区别
- for...in 的特点?为什么说数组的遍历尽量不用 for...in?
类
- 类的继承其实就是复制,js不能复制
- 隐式混入和显式混入的区别(前者直接全部“复制”过来,后者用call、apply)
原型
- 原型链上的隐式屏蔽
- 使用new一个有原型的对象的时候会发生什么步骤?
- Foo.prototype的 .constructor 属性是一直存在的吗?它的指向?
- var b = Object.create(a);的作用机制
- Object.create(); 的缺点
行为委托
- 一句话概括:函数的继承,对象的委托
- 委托的两个原则:1、状态保存在委托者,而不是委托目标。2、避免在[prototype]链上的不同位置使用相同的命名
- 委托的实质?
- 根据下面函数继承写出相应的行为委托
函数继承:
1 function A(name) {
2 this.name = name;
3 }
4 A.prototype.sayName = function() {
5 console.log(this.name);
6 };
7 function B(name) {
8 A.call(this, name);
9 }
10 B.prototype = Object.create(A.prototype);
11 var b = new B(‘Nic‘);
12 b.sayName(); //Nic
答案:
行为委托:
1 var A = {
2 init: function(name) { this.name = name; },
3 sayName: function() { console.log(this.name); }
4 };
5 var B = Object.create(A);
6 B.init(‘Nic‘);
7 B.sayName() //Nic
怎么改变的:
- 将函数封装对象
- 将构造函数内部的变量定义封装成一个函数
- 将prototype对象的函数逐一封装进该对象
- 将两个对象关联
- 此时没有继承的说法了,关联不是上下级的关系,而是任意的
- 关联后可以自定义或者封装新对象的一些属性及方法
- 注意:尽量避免暴露委托
class
- class不能声明属性只能声明方法
1 class A {
2 constructor(name, age) {
3 this.name = name;
4 this.age = age;
5 }
6 sayName() {
7 console.log(‘hello, my name is: ‘+this.name);
8 }
9 }
10 var a = new A(‘wind‘, 20);
11 a.sayName(); //hello, my name is: wind
API设计原则
- 最小特权原则:最小限度的暴露必要内容,而将其他内容都“隐藏”起来(将变量声明在某个作用域内尽量不在全局作用域中)
- 尽量避免匿名函数
- 关联关系中尽量避免函数名重复,会引发屏蔽覆盖的副作用
- 内部委托(在内部调用)比直接委托(直接使用)可以让API接口更加清晰
- 委托最好在内部实现,不要轻易的暴露出去
(以上答案三天后公布)
以上是关于Javascript基础知识小测试的主要内容,如果未能解决你的问题,请参考以下文章