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接口更加清晰
  • 委托最好在内部实现,不要轻易的暴露出去

(以上答案三天后公布)

时间: 2024-12-31 04:04:33

Javascript基础知识小测试(一)的相关文章

java基础知识小小结

java基础知识小总结 在一个独立的原始程序里,只能有一个 public 类,却可以有许多 non-public 类.此外,若是在一个 Java 程序中没有一个类是 public,那么该 Java 程序的文件名就可以随意命名了. 文档注释,是以单斜线加两个星形标记( /**)开头,并以一个星形标记加单斜线( */)结束.用这种方法注释的内容会被解释成程序的正式文档,并能包含进如 javadoc之类的工具生成的文档里,用以说明该程序的层次结构及其方法. Java 把整数常量的数据类型均视为 int

JavaScript基础知识梳理----正则表达式

JavaScript基础知识梳理----正则表达式 1.创建 方式:---字面量:var 变量名=/表达式/模式修饰符 ---构造函数:var 变量名=new RegExp(“表达式”,“模式修饰符”) 说明: 表达式 单个字符和数字 . 匹配除换行符之外的任意字符 [a-z0-9] 匹配方括号中的任意字符 [^a-z0-9] 匹配不在方括号中的任意字符 \d 匹配数字 \D 匹配非数字 \w 匹配字母 \W 匹配非字母 空白字符 \0 匹配null字符 \b 匹配空格符 \f 匹配进纸符 \n

Javascript基础知识5

不要把相等运算符(==)与赋值运算符(=)搞混. 以&&运算符隔开的两个条件中的前者为错,则不会检测第二个条件的真假.利用这一点,可以提高脚本的速度. 使用带switch的多个条件 if(button=="next") window.location = "next.html"; else if(button=="previous") window.location = "pre.html"; else if(

javascript 基础知识

javascript 基础知识编程规范注释 //驼峰对象化编程 数据类型字符串.数字.布尔.数组.对象.Null.Undefined定义 var carname=new String; var x= new Number; var y= new Boolean; var cars= new Array; var person= new Object; 字符串 var word = "Hello World!"; 数字 var x1 = 34.00; //使用小数点来写 var x2 =

JavaScript基础知识梳理--数组

JavaScript基础知识梳理--数组 1.创建方法 空数组:var obj=new Array(); 指定长度数组: var obj=new Array( size ); 指定元素数组 :  var obj=new Array( 元素1,元素2,....): 单位数组:var obj=new Array[ 元素1,元素2,元素3,...,元素N]; 多维数组:var a=new Array( [数组1],[数组2],[数组3],...,[数组N] ); 2.基本操作 存取数组元素: 单维数组

(1)JavaScript基础知识

Javascript基础知识 1.如何使用JavaScript (1).通过<script></script>中直接编写 (2).通过<script src='目标文档的URL'></script>链接外部的Js文件 ① <script  src="URL" type="text/javascript" charset="utf-8"></script> (3).作为某个元素

Javascript基础知识4

字符串大小写转换 toUpperCase()将所有的字符串转换成大写 toLowerCase()将所有的字符串转换成小写 substring(x,y)返回字符串的一部分,从x开始到y结束 charAt(x)获取第x个字符 indexOf("",x)查找字符串, 第一个内容是字符串,第二个是从第x开始 得到的值为这个字符串是从第几个字符开始的 同样lastindexOf()从最后开始查找 split("")分离字符串,内容为以什么分离, 得到的是一个数组 同理,将一个

javascript 基础知识1 数据类型

首先javascript是一种具有面向对象能力的,解释型程序设计语言. js对大小写敏感,一定要采取一致的字符大小写形式,在js中的结束分号(:)是可选的,为了避免JS语句错误,我们还是要注意添加,养成良好的编写习惯. 下面看看数据类型和值. JS有7种数据类型:字符串.数字.布尔.数组.对象.Null.Undefined 字符串类型:由Unicode字符,数字,标点符号组成的序列,可以为多个字符,也可以为0个字符. 1 <script> 2 // var用于声明一个变量 3 var stri

javascript基础知识拾遗

1 下面列出的值被当作假 false null undefined '' 0 NaN 其它所有值被当作是真 console.log(undefined || true); //true console.log(0||true); //true console.log(''||true); //true console.log(false||true); //true console.log(null||true); //true console.log(NaN||true); //true co