13. 变量

最后更新于:2022-04-01 21:12:27

* [13.1](https://github.com/yuche/javascript#13.1) 一直使用 `const` 来声明变量,如果不这样做就会产生全局变量。我们需要避免全局命名空间的污染。[地球队长](http://www.wikiwand.com/en/Captain_Planet)已经警告过我们了。(译注:全局,global 亦有全球的意思。地球队长的责任是保卫地球环境,所以他警告我们不要造成「全球」污染。) ~~~ // bad superPower = new SuperPower(); // good const superPower = new SuperPower(); ~~~ * [13.2](https://github.com/yuche/javascript#13.2) 使用 `var` 声明每一个变量。 > 为什么?增加新变量将变的更加容易,而且你永远不用再担心调换错 `;` 跟 `,`。 ~~~ // bad const items = getItems(), goSportsTeam = true, dragonball = 'z'; // bad // (compare to above, and try to spot the mistake) const items = getItems(), goSportsTeam = true; dragonball = 'z'; // good const items = getItems(); const goSportsTeam = true; const dragonball = 'z'; ~~~ * [13.3](https://github.com/yuche/javascript#13.3) 将所有的 `const` 和 `let` 分组 > 为什么?当你需要把已赋值变量赋值给未赋值变量时非常有用。 ~~~ // bad let i, len, dragonball, items = getItems(), goSportsTeam = true; // bad let i; const items = getItems(); let dragonball; const goSportsTeam = true; let len; // good const goSportsTeam = true; const items = getItems(); let dragonball; let i; let length; ~~~ * [13.4](https://github.com/yuche/javascript#13.4) 在你需要的地方给变量赋值,但请把它们放在一个合理的位置。 > 为什么?`let` 和 `const` 是块级作用域而不是函数作用域。 ~~~ // good function() { test(); console.log('doing stuff..'); //..other stuff.. const name = getName(); if (name === 'test') { return false; } return name; } // bad - unnecessary function call function(hasName) { const name = getName(); if (!hasName) { return false; } this.setFirstName(name); return true; } // good function(hasName) { if (!hasName) { return false; } const name = getName(); this.setFirstName(name); return true; } ~~~
';