摘要:1. 我们需要牢记两点:①__proto__和constructor属性是对象所独有的;② prototype属性是函数所独有的,因为函数也是一种对象,所以函数也拥有__proto__和constructor属性。 2. __proto__属性的作用就是当访问一个对象的属性时,如果该对象内部不存在这
阅读全文
摘要:我们向函数传递 a 的时候,实际是将引用 a 的一个复本赋值给 x,而 a 仍然指向 [1,2,3]。在函数中我们可以通过引用 x 来更改数组的值(push(4) 之后变为 [1,2,3,4])。但 x =[4,5,6] 并不影响 a 的指向,所以 a 仍然指向 [1,2,3,4]。我们不能通过引用
阅读全文
摘要:由于计算机内部的信息都是由二进制方式表示的,即0和1组成的各种编码,但由于某些浮点数没办法用二进制准确的表示出来。 规避浮点计算 精度的思路: 将要进行计算的数值转化为整数进行计算,再将计算结果转化为小数。
阅读全文
摘要:现在我们可以根据优先级来判断函数在某个调用位置应用的是哪条规则。 可以按照下面的顺序来进行判断:1. 函数是否在 new 中调用(new 绑定) ? 如果是的话 this 绑定的是新创建的对象。var bar = new foo()2. 函数是否通过 call、 apply(显式绑定) 或者硬绑定调
阅读全文
摘要:1)构建一个全新对象 Kitty; 2)给新对象的内部属性赋值,关键是给[[Prototype]]属性赋值,构造原型链(如果构造函数的原型是 Object 类型,则指向构造函数的原型;不然指向 Object 对象的原型); 3)执行函数 Cat,执行过程中内部 this 指向新创建的对象 kitty
阅读全文
摘要:看如下代码: 打印结果显示为1, 在 foo() 执行后, 其返回值(也就是内部的 bar() 函数) 赋值给变量 baz 并调用 baz(), 实际上只是通过不同的标识符引用调用了内部的函数 bar()。 此时,foo()执行后通常以为引擎的垃圾回收机制销毁foo的内部作用域,实际上受bar所声明
阅读全文
摘要:上面代码运行结果为: 1,3 eval(..) 函数可以接受一个字符串为参数, 并将其中的内容视为好像在书eval(..) 函数可以接受一个字符串为参数, 并将其中的内容视为好像在书写时就存在于程序中这个位置的代码。 换句话说, 可以在你写的代码中用程序生成代码并运行, 就好像代码是写在那个位置的一
阅读全文
摘要:RHS 查询与简单地查找某个变量的值别无二致, 而 LHS 查询则是试图找到变量的容器本身, 从而可以对其赋值。 以下例子进行分析: c = LHS查询, foo(2) RHS查询, 隐式赋值a =2 LHS查询, b = LHS查询, a RHS查询, return a + b a,b分别RHS查
阅读全文
摘要:1. 遇到 var a, 编译器会询问作用域是否已经有一个该名称的变量存在于同一个作用域的集合中。 如果是, 编译器会忽略该声明, 继续进行编译; 否则它会要求作用域在当前作用域的集合中声明一个新的变量, 并命名为 a。 2. 接下来编译器会为引擎生成运行时所需的代码, 这些代码被用来处理 a =
阅读全文
摘要:1. cat.jumps 打印结果为: 7 使用箭头函数 打印结果为9 2. call apply bind扔不能改变this指向 打印结果为blue; 使用箭头函数: 打印结果为: red; 由于箭头函数没有自己的this,所以当然也就不能用call()、apply()、bind()这些方法去改变
阅读全文
摘要:1 var aPath = 'C:/programfiles/game/a' 2 var bPath = 'C:/workspace/QQ/game/b' 3 function positivePath(a, b) { 4 var aArr = a.split('/') 5 var bArr = b.spl...
阅读全文
摘要:Flow是Javascript静态类型检查工具,可以实现接近强类型语言的开发体验。 1. 安装依赖 2. 在指定文件目录下初始化 初始化后会在相应文件目录下生成 .flowconfig 文件,可以进行相关设置; 3. 新建一个index.js文件,插入如下代码 运行 flow 指令,结果如下图所示
阅读全文
摘要:1. 递归 2. toString方法 3. ES6 数组拓展方法flat
阅读全文