【问题标题】:'let', 'const', and 'var' on global functions in JavaScript [closed]JavaScript中全局函数的'let','const'和'var' [关闭]
【发布时间】:2017-04-30 17:02:33
【问题描述】:

定义全局函数时,应该使用varlet还是const

var fn = function () {};
let fn = function () {};
const fn = function () {};

我在这里主要考虑 C/Pascal 意义上的全局函数,即在当前文件的其余部分中按名称可用/可见的函数。

当我学习 JavaScript 时,我们使用了 var fn=..functino fn ()..,我正在尝试更新我的知识,因为浏览器现在原生支持 ECMAScript 6。

【问题讨论】:

  • 你想达到什么目的?
  • @guest271314 我只是想学习正确/惯用地使用 es6。 (1 票赞成不清楚,3 票赞成)。请把我的不清晰理解为缺乏理解,确实如此,而不是我试图变得迟钝..
  • 'C/Pascal 意义上的全局函数' - 它在 JS 中不称为全局,它是模块范围,它与函数范围或 JS 中的其他局部范围并没有真正的区别。它只是functionconst 如果它需要被声明一次(const 提供了防止意外重新分配的保障)或let 如果它应该被有条件地分配。请注意,function 声明已提升,因此可以将其移至底部以提高可读性,而 constlet 则不能。
  • @estus 谢谢,这解决了一大堆问题:-)
  • 对问题的最后一次编辑,从这里的角度来看,提供了查询的上下文。

标签: javascript ecmascript-6


【解决方案1】:

简而言之:我建议您使用const。为什么?

(在以下示例中,假设我们处于浏览器环境中。)

函数声明/语句

它们被提升并成为全局对象的属性。

fn(); // No error
function fn() {}
console.log('fn' in window); // true

带有var的函数表达式

它们没有被提升,但在全局范围内声明的变量总是成为全局对象的属性。

fn(); // TypeError
var fn = function () {};
console.log('fn' in window); // true

带有let的函数表达式

它们不会被提升,它们不会成为全局对象的属性,但您可以为变量分配另一个值。由于 JavaScript 是松散类型的,因此您的函数可以替换为字符串、数字或其他任何内容。

fn(); // ReferenceError
let fn = () => {};
console.log('fn' in window); // false
fn = 'Foo'; // No error

带有const的函数表达式

它们不会被提升,它们不会成为全局对象的属性,并且您无法通过重新分配来更改它们。事实上,常量不能被重新声明。

fn(); // ReferenceError
const fn = () => {};
console.log('fn' in window); // false
fn = 'Foo'; // TypeError

【讨论】:

    【解决方案2】:

    您应该使用const,除非有令人信服的理由需要使用let。你应该完全停止使用var

    但通常,我会完全避免使用函数表达式,而是使用函数声明:

    // Use this
    function myFunc() {
      // do stuff
    }
    
    // Instead of this
    const myFunc = function() {
      // do stuff
    }
    

    【讨论】:

    • 不,这取决于值(函数)是否发生变化。
    • 这将是一个令人信服的理由。我假设他明白const 确实是不可变的。
    • 使用函数声明而不是 fn 的任何特殊原因。表达式?
    • 个人风格,真的。由于提升,我更喜欢声明。有些人倾向于发现这种不可预测的行为,但我不同意。显然,在某些情况下需要函数表达式,但我倾向于尽可能使用声明。
    • @Brennan “您应该尝试以所有变量都是consts 的方式编写代码” 定义 all 变量使用const? const n = 1; n += 1;//Uncaught TypeError: Assignment to constant variable.
    【解决方案3】:

    埃里克·埃利奥特写道:

    const 表示不会重新分配标识符。

    let,是变量可能被重新赋值的信号,例如 循环中的计数器,或算法中的值交换。也预示着 该变量将仅在定义它的块中使用, 这并不总是包含整个函数。

    var 现在是定义变量时可用的最弱信号 在 JavaScript 中。变量可能会或可能不会被重新分配,并且 变量可能用于也可能不用于整个函数,或仅用于 块或循环的目的。

    来自https://medium.com/javascript-scene/javascript-es6-var-let-or-const-ba58b8dcde75

    因此,最佳做法是使用const,因为不应重新声明函数。

    【讨论】:

      猜你喜欢
      • 2022-12-01
      • 1970-01-01
      • 2018-05-14
      • 2021-10-19
      • 2019-03-20
      • 2023-03-25
      • 2018-03-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多