JavaScript中的全局函数'let','const'和'var'

时间:2017-04-30 17:02:34

标签: javascript ecmascript-6

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

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

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

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

3 个答案:

答案 0 :(得分:3)

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

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

// Use this
function myFunc() {
  // do stuff
}

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

答案 1 :(得分:3)

Eric Elliot写道:

  

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