gpt4 book ai didi

ecmascript-6 - 对所有永不更改的变量使用const是否有意义?

转载 作者:行者123 更新时间:2023-12-03 13:45:17 25 4
gpt4 key购买 nike

给定这样的东西:

const audio = React.findDOMNode(this.refs.audio);
const seeker = React.findDOMNode(this.refs.seeker);
const {left, right} = seeker.getBoundingClientRect();
const seekToPerc = (event.clientX - left) / (right - left);

audio.currentTime = this.props.totalRunTime * seekToPerc;

这是过度使用 const吗?我应该在这里使用 let吗?

最佳答案

const的使用取决于个人。如果您假装javascript是强类型的,则大多数javascript引擎的优化效果最佳。因此,const似乎是一个好主意。

一些事实。

  • MDN声明const像let一样是块作用域的。这是真的
    在严格模式下。
  • 必须在声明时为Consts分配一个值。只有严格才是真的
    模式。
  • 无法重新分配Consts。无论是严格的还是正常的,都是如此。
    但是在正常的javascript中,分配给常量会失败,而这会静默地失败
    表示难以发现错误的来源。 (注意没有好处
    不使用严格模式的参数)

  • 差异为例
    function log(d){console.log(d);}
    (function (){
    if(true){
    const a = 10; // correctly formed use of constant
    const b; // does not fail
    log(a); // 10;
    log(b); // undefined
    b = 10; // nothing happens. If you have forgoten this is a constant
    // you will have a hard time knowing this assignment is failing
    log(b); // undefined
    }
    // scope not respected
    log(a); // 10 const should have block scope. This does not seem to be true
    // in normal javascript
    })();

    // function in strict mode
    // not this is an example only and can not run. It is a compilation of several functions
    (function (){
    "use strict";
    if(true){
    const a = 10;
    const b; // SyntaxError: Unexpected token. Javascript parsing
    // stops here and the function will never be called
    a = 20; // TypeError: Assignment to constant variable
    }
    // scope is respected
    log(a); // ReferenceError: a is not defined
    })();

    如您所见,在严格模式下使用const和不使用const之间有很大的区别。在严格模式之外的任何情况下使用常量都是很困难的。

    表现。
    Chrome浏览器采用 const的时间很早,我记得至少3年前使用过 const。由于我专门研究图形,因此性能至关重要。我认为 const将提供急需的性能优势,就像#define在C/C++中通过简单地将常量值插入代码一样。可悲的是,直到那天结束时,我才完全反对使用const,因为它的性能很差。

    从那以后,它得到了改善。

    jsperf "Consts V Vars"

    在所有测试中,使用 const始终较慢,但它是边际性的,太接近调用了。唯一的异常(exception)是块作用域声明,它的速度约为 varlet的速度的1/3。一个令人惊讶的发现是,现在Chrome Beta上的 let现在非常快,一个月前我就不喜欢它了,这就是我回答的原因。

    OP问...
    将const用于永远不会更改的所有变量是否有意义?

    一年前,我会说“永远不要使用它”。几个月前,我会说:“有充分的理由,但var更好”。

    现在,我的答案是绝对可以在您不希望变量发生变化时使用常量。常量输出执行字面量,并且与var一样好。
    const c = 10;
    var v = 10;
    var a = 10; // this is slower
    var a = c; // this is 20% faster
    var a = v; // this is about < 1% faster than const.

    在chrome上 letconst的最近几个月中,性能随着浏览器的变化而变化。我怀疑常量将在今年年底之前取代var。 (请注意我正在使用Chrome Beta 47)

    我执行的测试没有为代码优化提供很大的空间,因此我猜想使用 const会带来其他性能,这些性能在测试中并不明显。

    从本质上说,常量是强类型的,这使javascript优化算法可以用来提供额外的性能。

    使用常量可以提高代码质量。 Javascript(甚至严格模式)可以长时间隐藏错误,使用常量可以减少错误分配,意外类型转换等的风险。


    我对const的使用提出了强烈警告。 仅在严格模式中使用const,它在普通javascript中的行为很危险,只会给您带来麻烦。

    关于ecmascript-6 - 对所有永不更改的变量使用const是否有意义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33295772/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com