<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
</body>
</html>
<script>
// 官方说法:全局作用域、函数作用域、块级作用域、模块作用域
// 通俗说法:局部作用域分为函数作用域和块级作用域
// 外部无法使用局部作用域的变量:因为局部用完了,变量会被释放掉
// 1、全局作用域
// 全局作用域:<script>标签内部、.js文件
// 全局作用域声明的变量其他作用域可以使用
// 注意⚠️:(1)在函数中未使用任何关键字声明的变量是全局变量
// 注意⚠️:(2)为window对象动态添加的属性是全局变量
// 尽可能少声明全局变量,减少变量命名污染
// 2、函数作用域
// 在函数内部声明的变量只能在函数内部访问,外部无法访问
// 函数的形参可以看作是函数的局部变量
function func(num) {
// 形参num相当于局部变量
console.log("num-->", num);
var test = "hello";
}
func(1);
// 外部无法使用函数内部的变量
console.log("test-->", test); // Uncaught ReferenceError: test is not defined
// 3、块级作用域
// 使用{}包裹的代码称为代码块: for if while {}... 这些都会形成块级作用域
// let/const声明会产生块级作用域,推荐使用let/const
for (let i = 0; i < 3; i++) {
console.log("i1-->", i);
}
// 外部无法使用块级作用域内部的变量
console.log("i2-->", i); // Uncaught ReferenceError: i is not defined
// 为什么要有局部变量,不全部搞成全局变量:1、变量命名污染 2、释放资源,提高性能
// 例如:函数调用完,函数就执行结束了,这就意味着函数里面的变量没用了,函数里的变量被释放了,函数这块的空间就被释放出来了
</script>
1、js - 面试 - 作用域
于 2023-05-22 16:05:24 首次发布
文章详细介绍了JavaScript中的变量作用域,包括全局作用域(在<script>标签或.js文件中声明的变量)、函数作用域(函数内部的变量)和块级作用域(由let/const声明的变量)。强调了局部作用域的限制和重要性,以及为何避免过多全局变量以防止命名冲突和优化性能。
摘要由CSDN通过智能技术生成