在定义全局函数时,我应该使用var
,let
还是const
?
var fn = function () {};
let fn = function () {};
const fn = function () {};
我在这里主要考虑C / Pascal意义上的全局函数,即在当前文件的其余部分中按名称可用/可见的函数。
当我学习JavaScript时,我们使用var fn=..
或functino fn ()..
,我正在尝试更新我的知识,因为浏览器现在支持ECMAScript 6。
答案 0 :(得分:3)
除非有令人信服的理由需要使用const
,否则您应该使用let
。您应该完全停止使用var
。
但通常,我完全避免使用函数表达式而是使用函数声明:
// Use this
function myFunc() {
// do stuff
}
// Instead of this
const myFunc = function() {
// do stuff
}
答案 1 :(得分:3)
const
表示不会重新分配标识符。
let
,是一个可以重新分配变量的信号,例如a 循环中的计数器,或算法中的值交换。它也发出信号 变量将仅在其定义的块中使用, 这并不总是包含整个函数。
var
现在是定义变量时可用的最弱信号 在JavaScript中。该变量可能会或可能不会被重新分配,而且 变量可以用于也可以不用于整个函数,或仅用于 块或循环的目的。
来自https://medium.com/javascript-scene/javascript-es6-var-let-or-const-ba58b8dcde75
因此,最佳做法是使用const
因为函数不应重新声明。
答案 2 :(得分:3)
简而言之:我建议您使用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