JavaScript 中全局函数的“let”、“const”和“var”

the*_*orn -2 javascript ecmascript-6

定义全局函数时,我应该使用var, let, 还是const?

var fn = function () {};
let fn = function () {};
const fn = function () {};
Run Code Online (Sandbox Code Playgroud)

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

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

Bad*_*bra 5

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

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

函数声明/语句

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

fn(); // No error
function fn() {}
console.log('fn' in window); // true
Run Code Online (Sandbox Code Playgroud)

函数表达式 var

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

fn(); // TypeError
var fn = function () {};
console.log('fn' in window); // true
Run Code Online (Sandbox Code Playgroud)

函数表达式 let

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

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

函数表达式 const

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

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