ES6 什么是块级作用域变量和函数
块级作用域变量 和 函数 是在特定的块或者花括号{}中定义的,并且它们只能在该特定块或者从该块中访问。块级作用域变量首次引入于 EcmaScript2015 或 es6 中。ES6为我们引入了两个关键字: let 和 const 来声明具有块级作用域的变量。在本文中我们将详细看一下它们。
let关键字: let 关键字不允许在同一个块中重新声明一个变量,尽管使用 var 关键字声明变量时是可以的。如果尝试重新声明用let关键字定义的变量,将会抛出错误 SyntaxError: Identifier has already been declared 。
语法:
let first_name="John";
示例1: 下面的示例说明了在使用 let 关键字时 不重新声明 变量的情况 。
HTML
<script>
function myFunction() {
var name = "GeeksforGeeks";
let desc =
"A computer science portal for all geeks";
console.log(name);
console.log(desc);
var name = "GFG";
console.log(name);
}
myFunction();
console.log(desc); // ReferenceError: desc is not defined
</script>
输出:
示例2: 下面的示例说明了当我们使用let关键字重新声明变量时的情况。
HTML
<script>
function myFunction() {
var name = "GeeksforGeeks";
let desc =
"A computer science portal for all geeks";
console.log(name);
console.log(desc);
var name = "GFG";
let desc = "Welcome to GFG";
console.log(name);
console.log(desc);
}
myFunction();
</script>
**输出:**
常量关键字: 使用 const 关键字声明的变量不能像使用 let 关键字一样被重新声明,也不能重新赋值。我们使用const关键字声明一个在代码中不希望改变的常量。如果我们尝试重新赋值const变量,会显示一个错误: TypeError: Assignment to constant variable.
语法:
const age = 23;
示例1:
在这个示例中,我们试图重新分配一个const变量,结果会产生一个错误。
HTML
<script>
function myFunction() {
var name = "GeeksforGeeks";
const desc = "A computer science portal for all geeks";
desc = "Welcome to GFG";
console.log(name);
console.log(desc);
}
myFunction();
</script>
输出:
示例2: 在这个示例中,我们尝试在函数外部访问一个变量。
HTML
<script>
function myFunction() {
var name = "GeeksforGeeks";
const desc =
"A computer science portal for all geeks";
console.log(name);
console.log(desc);
}
myFunction();
console.log(desc); //ReferenceError: desc is not defined
</script>
输出:
示例3: 在这个示例中,我们尝试重新声明 描述 变量。
HTML
<script>
function myFunction() {
var name = "GeeksforGeeks";
const description =
"A computer science portal for all geeks";
console.log(name);
const description = "Welcome to GFG!";
console.log(description);
}
myFunction();
</script>
输出:
块级作用域函数: 块级作用域函数可以在代码块内部定义,该块可以位于简单括号内或条件语句的任何函数内。如果一个函数被写在另一个函数内部,那么这些函数就是嵌套函数。
函数写在另一个函数内:
语法:
function func1(){
// Content of the func1()
function func2(){
// Content of the func2()
}
}
示例:
HTML
<script>
function myFunction() {
var name = "GeeksforGeeks";
function myFunction2() {
let desc =
"A computer science portal for all geeks.";
console.log(name);
console.log(desc);
}
myFunction2();
console.log(name);
}
myFunction();
</script>
输出:
写在条件语句内的函数:
语法:
if (true){
// Content of conditional statement
function func1(){
// Content of func1()
}
}
示例:
HTML
<script>
if (true) {
var name = "GeeksforGeeks";
function myFunction() {
let description =
"A computer science portal for all geeks.";
console.log(name);
console.log(description);
}
myFunction();
}
</script>
输出: