hand
54
_1_11_46
4
返回栏目
0k
2k
1k
2k
1k
1k
1k
2k
2k
2k
1k
2k
1k
2k
1k
1k
1k
1k
1k
2k
1k
1k
1k
1k
1k
1k
1k
1k
1k
2k
1k
1k
1k
1k
1k
1k
1k
1k
1k
2k
1k
1k
1k
1k
1k
1k
1k
2k
1k
2k
1k
1k
1k
1k
1k
1k
1k
2k
2k
1k
1k
1k
2k
1k
1k
2k
2k
1k
1k
1k
2k
1k
1k
2k
2k
1k
2k
1k
1k
2k
2k
2k
3k
3k
2k
3k
2k
3k
3k
3k
1k
2k
3k
2k
2k
3k
3k
2k
2k
6k
3k
2k
2k
5k
3k
4k
3k
3k
2k
4k
3k
3k
2k
3k
3k
1k
4k
4k
4k
2k
5k
3k
2k
3k
4k
3k
3k
4k
2k
3k
3k
4k
2k
2k
3k
4k
3k
3k
2k
5k
2k
3k
3k
3k
3k
2k
3k
3k
3k
2k
2k
2k
2k
3k
2k
2k
2k
3k
2k
2k
2k
2k
2k
2k
0.1k
0.2k
3k
2k
3k
2k
0.1k
2k
2k
4k
2k
2k
1k
2k
2k
3k
3k
3k
3k
2k
2k
3k
3k
3k
4k
3k
3k
4k
3k
2k
2k
3k
3k
3k
3k
3k
3k
2k
3k
3k
4k
4k
3k
3k
2k
2k
3k
2k
2k
1k
2k
3k
1k
2k
2k
2k
2k
2k
2k
2k
2k
2k
4k
2k
3k
2k
1k
2k
2k
2k
2k
2k
3k
2k
3k
1k
2k
2k
2k
0k
2k
2k
2k
2k
2k
2k
2k
3k
2k
2k
1k
1k
3k
2k
3k
1k
2k
1k
2k
2k
2k
2k
3k
1k
3k
2k
2k
2k
2k
2k
2k
1k
2k
2k
4k
3k
3k
2k
2k
2k
2k
2k
2k
4k
3k
3k
3k
2k
2k
2k
2k
2k
2k
3k
4k
返回前端 - Javascript栏目
作者:
贺及楼
成为作者
更新日期:2025-02-21 17:19:00
在前端开发的世界里,JavaScript 就像是一位神奇的魔法师,而函数、作用域和块级作用域则是它手中重要的魔法道具。下面,就让我们一起揭开它们的神秘面纱。
函数可以看作是一段封装好的代码块,它能够完成特定的任务。就像我们生活中的小帮手,当我们需要完成某个特定的事情时,就可以召唤它。
function greet(name) {
return `Hello, ${name}!`;
}
let message = greet('Alice');
console.log(message);
在这个例子中,greet
函数接受一个参数 name
,并返回一句问候语。我们只需要调用这个函数并传入相应的参数,就能得到想要的结果,是不是很方便呢?
作用域决定了变量和函数的可见性与生命周期。在 JavaScript 中,主要有全局作用域和函数作用域。全局作用域就像是一个大广场,所有的变量和函数都可以在这里被访问;而函数作用域则像是一个个小房间,只有在这个房间里定义的变量和函数,才能在房间里被访问。
// 全局作用域
let globalVariable = 'I am global';
function testFunction() {
// 函数作用域
let localVariable = 'I am local';
console.log(globalVariable);
console.log(localVariable);
}
testFunction();
console.log(globalVariable);
// console.log(localVariable); 这里会报错,因为 localVariable 只在函数作用域内可见
从这个例子可以看出,全局变量可以在函数内部访问,但函数内部的局部变量只能在函数内部使用。
在 ES6 之前,JavaScript 只有全局作用域和函数作用域。ES6 引入了块级作用域,它使用 let
和 const
关键字来声明变量。块级作用域就像是小房间里的一个个小格子,变量只能在这个小格子里被访问。
if (true) {
// 块级作用域
let blockVariable = 'I am in a block';
console.log(blockVariable);
}
// console.log(blockVariable); 这里会报错,因为 blockVariable 只在块级作用域内可见
var
声明变量时,循环中的变量会泄漏到外部作用域,可能会导致一些意外的结果。而使用 let
声明变量,就可以避免这个问题。}, 1000);
console.log(i);
for (let j = 0; j < 3; j++) {
setTimeout(() => {
console.log(j);
}, 1000);
}``
在第一个循环中,由于
var没有块级作用域,所有的定时器都会在循环结束后执行,此时
i的值已经变为 3。而在第二个循环中,使用
let声明的
j具有块级作用域,每个定时器都会记住自己的
j` 值。
作用域类型 | 声明关键字 | 可见范围 | 应用场景 |
---|---|---|---|
全局作用域 | var 、let 、const |
整个脚本 | 定义全局共享的变量和函数 |
函数作用域 | var 、let 、const |
函数内部 | 封装局部逻辑,避免全局污染 |
块级作用域 | let 、const |
代码块内部(如 if 、for 等) |
解决循环变量泄漏问题,更精细地控制变量的生命周期 |
总之,函数、作用域和块级作用域是 JavaScript 中非常重要的概念,掌握它们可以让我们写出更加高效、健壮的代码。希望通过本文的介绍,你能对它们有更深入的理解。
前端 - Javascript
整章节共299节
快分享给你的小伙伴吧 ~