
JS学习记录
@引力波
这个作者很懒,什么都没留下…
展开
-
JS 预编译 作用域 作用域链 立即执行函数
JS执行三部曲 语法分析:全篇扫描,看有没有低级语法错误 预编译: (1)创建AO对象(执行期上下文) (2)找形参和变量声明,作为AO属性名值为undefined (3)将实参与形参统一 (4)在函数体找函数声明,将值赋予函数体 解释执行: 作用域 预编译发生在函数调用前一刻,js是解释执行,未执行函数前不能知道其内容及父级不能访问子级作用域。 作用域链 scope:执行上下文(栈) 当a定义时,只有scope[0](定义时上下文)此处指向GO全局作用域。 当a执行时,创建AO放入作用域链最顶端原创 2021-03-04 19:40:44 · 154 阅读 · 1 评论 -
JS优化技巧
1. 幂乘 // 冗余 Math.pow(2, 3); // 简洁 2**3 // 8 2. 双非位运算符 (~~) 双非位运算符是Math.floor()方法的缩写。 // 冗余 const floor = Math.floor(6.8); // 6 // 简洁 const floor = ~~6.8; // 6 双非位运算符只对 32 位整数有效,例如 (2**31)-1 = 2147483647。所以对于任何大于 2147483647 的数字,双非位运算符 (~~) 都会给出错误的结果,这种情原创 2021-03-04 19:30:57 · 142 阅读 · 1 评论 -
空值合并运算符 ‘??’
空值合并运算符 ‘??’ a ?? b 的结果是: 如果 a 是已定义的,则结果为 a, 如果 a 不是已定义的,则结果为 b。 如果第一个参数不是 null/undefined,则 ?? 返回第一个参数。否则,返回第二个参数 与 || 比较 重要的区别是: || 返回第一个 真 值。 ?? 返回第一个 已定义的 值。 || 无法区分 false、0、空字符串 “” 和 null/undefined。它们都一样 —— 假值(falsy values)。如果其中任何一个是 || 的第一个参数,那么我们原创 2021-03-04 19:29:06 · 704 阅读 · 1 评论 -
null vs 0 和 undefined
null vs 0 alert( null > 0 ); // (1) false alert( null == 0 ); // (2) false alert( null >= 0 ); // (3) true 相等性检查 == 和普通比较符 > ,< ,>= ,<= 的代码逻辑是相互独立的 进行值的比较时,null 会被转化为数字 undefined 和 null 在相等性检查 == 中不会进行任何的类型转换,它们有自己独立的比较规则,所以除了它们之间互等外,不原创 2021-03-04 19:27:06 · 559 阅读 · 1 评论