JavaScript使用let和const

JavaScript使用let和const,到目前为止,JavaScript只有两类作用域,即函数作用域全局作用域

对于很多程序员来说,特别是那些熟悉其他语言的程序员来说,JavaScript只有这两种类型的作用域是一件很烦人的事情。很多其他编程语言允许变量有所谓的“块级作用域”(JavaScript中的一个语句块,包含一对花括号之间的所有内容)。有块级作用域的一个变量,将只能够由与变量定义相同的块之中的程序语句访问。

JavaScript最近的更新注意到了这一疏漏,于是用一个新的关键字let加以弥补,这个关键字允许你定义具有严格的块级作用域的一个变量。

现在,我们来看看下面的代码段。它引入了我们之前没有见到过的一些内容—if()语句。我们只要知道这一点就够了:只有满足一个特定的条件时,这条语句就允许程序执行一个语句块。在这个例子中,这个条件就是“变量x的值大于50”。

function myFunction(x) {
    var y = x;
    if(x > 50) {
        var y = 10;
        alert("Inner y = " + y); // 警告框中显示10
    }
    alert("Outer y = " + y); // 警告框中显示10
    ... more statements ...
}

如果用100作为参数来调用这个函数,程序将会在警告框中显示什么呢?在函数作用域中,y的值最初将会被设置为100。在函数中的任何地方,这个值都是可以访问的。

由于x的值大于50,内部的代码块将会执行。这个内部代码块中的第一条命令,将会重新声明y,因此var关键字使得声明的变量有函数作用域,这个新的值在整个myFunction函数中都是可以访问的。

结果就是,在离开内部代码块并且执行第二个警告框时,y的新值(即10)将会显示出来。外围代码块中的任何其他代码行所看到的都是y的这个新值。

现在我们来看看,如果在内部代码块中使用let,将会发生什么情况。

function myFunction(x) {
    var y = x;
    if(x > 50) {
        let y = 10;
        alert("Inner y = " + y); // 警告框中显示10
    }
    alert("Outer y = " + y); // 警告框中显示100
    ... more statements ...
}

如上述代码所示,在内部的代码块中声明的变量y只有块级作用域,当离开了内部代码块并且执行第二个警告框时,y的值将报告为100,并且外围代码块中的任何后续代码行看到的都是这个值。

酷客网相关文章:

赞(0)

评论 抢沙发

评论前必须登录!