JS没有块级作用域带来的问题

JS基础一

说白了,JavaScript 中的数值精度问题比较复杂,因为它遵循 IEEE-7 5 4 标准,导致像 0.1 这样的小数无法用二进制精确表示。
我们先来说说最重要的事情。
比如我们去年办理的金融项目中,0.1 -0.9 不等于0.1 ,直接导致了计算错误。
另一个问题是,数值准确性问题在金融和科学计算中尤为突出,可能影响数百万或数十亿美元。
另一个重要的细节是,JavaScript 中唯一的数字类型是 Number,而其他语言可能提供更精确的数字类型,例如 BigDecimal。

我最初认为数值精度问题只是一个技术细节,但后来我发现这是错误的。
它还会影响前端开发的用户体验。
例如,如果电子商务网站的折扣计算存在准确性问题,可能会导致用户认为系统不准确并影响他们的信任。

值类型和引用类型的区别其实很简单。
值类型包括字符串、数字、布尔值等,它们占用固定的空间,存储在栈中,而引用类型,如对象、数组、函数等,不占用任何固定的空间,存储在堆中。
例如,当您看到 var a = 1 ,然后 var b = a 时,您实际上获得的是 a 的值,而不是指向 a 的指针。
地址值类型使用typeof来实现非常方便。

表达式和语句之间的区别也很重要。
表达式用于计算结果,例如 A + B,而语句用于执行操作,例如 if 条件。
表达式简化了代码,因为它们可以直接出现在代码的其他位置。

对于函数表达式和函数声明,函数声明可以先调用再使用,而函数表达式必须先声明后使用。
去年的一个项目中,我急于使用函数,不小心使用了函数表达式,导致运行时错误。

就变量提升而言,这实际上是JavaScript的一个陷阱。
在预编译阶段,var和函数声明将被提升到顶部,但函数声明不会被执行,这可能会导致一些意外。
例如,var a = 1 , function b(){};输出顺序;控制台.log(a);控制台.log(b);会让你感到困惑。

等等,还有一点,TDZ(TemporalDeadZone)是ES6 中引入的概念。
let 和 const 语句不会像 var 那样传播,但会有一个临时的死区。
尝试访问该字段中的这些变量将报告错误。

总的来说,我认为JavaScript开发中最重要的是理解和处理数值精度问题,区分值类型和引用类型,正确使用表达式和语句,理解函数声明和表达式以及关注变量促销和TDZ非常重要。
你怎么认为?还有其他需要注意的地方吗?