为什么要在JavaScript中设置函数作用域?

为什么要在JavaScript中设置函数作用域?,javascript,scope,Javascript,Scope,我了解let和var的块与函数范围(或者我认为我了解)。最近我遇到了一些JavaScript,它们在函数范围中使用了let,我认为这相当于使用var,比如: function xyz ( abc ) { let mno = abc - 1; /* or whatever */ ... } 这与使用var有什么功能上的区别吗?还是仅仅是一种风格上的东西?没有任何区别。这要么是风格上的问题,要么是对var和let工作方式的误解。也许最初的作者(编写您看到的函数的人)认为let与

我了解
let
var
的块与函数范围(或者我认为我了解)。最近我遇到了一些JavaScript,它们在函数范围中使用了
let
,我认为这相当于使用
var
,比如:

function xyz ( abc ) {
    let mno = abc - 1;   /* or whatever */
    ...
}

这与使用
var
有什么功能上的区别吗?还是仅仅是一种风格上的东西?

没有任何区别。这要么是风格上的问题,要么是对
var
let
工作方式的误解。也许最初的作者(编写您看到的函数的人)认为
let
const
是一样的(在中几乎就是这样)。换句话说,有时人们将一种语言的样式/语法带入另一种语言,因为声明看起来相似,但实际上意味着完全不同的东西

我了解let&var的块与函数范围(或者我认为我了解)


别担心,你会的<正如您所指出的,code>let用于块作用域。

根据,您所描述的情况没有区别,它们在功能上是相同的,因为它们都在功能范围内。正如您所猜测的,可能只是想在定义变量时保持一致的人(或linter)。

函数范围内的一个区别是,如果在定义变量之前尝试引用
let
,则可能会发生:

function example() {
    console.log(a); // undefined
    console.log(b); // ReferenceError: b is not defined
    var a = 1;
    let b = 2;
}

你要寻找的答案是:有些人认为
var
不应该出现在该语言中,并且在所有情况下都会使用
let
,作为推广良好实践的工具。谢谢,我曾经被perl荒谬的
my
作用域灼伤过,所以我想确保没有我不知道的愚蠢的角落案例。没问题。据我所知,这里没有奇怪的角落案例。除了
var
let
正常工作时提升,以一种不那么愚蠢和混乱的方式。许多人主张你应该在任何地方替换
var
,因为这对其他语言的程序员来说比较容易混淆。@max不确定,但我记得前一段时间读到,他基本上是被Netscape催促在10天内带着一个新的语言原型回到他们那里的(因此,所有奇怪的js错误一直延续到今天)