【JavaScript】14_ 作用域 +作用域链
【摘要】 9、作用域 作用域(scope)作用域指的是一个变量的可见区域 - 作用域有两种: 全局作用域全局作用域在网页运行时创建,在网页关闭时消耗所有直接编写到script标签中的代码都位于全局作用域中全局作用域中的变量是全局变量,可以在任意位置访问 局部作用域块作用域 - 块作用域是一种局部作用域 - 块作用域在代码块执行时创建,代码块执行完毕它就销毁 - 在块作用...
9、作用域
作用域(scope)
- 作用域指的是一个变量的可见区域
- 作用域有两种:
全局作用域
- 全局作用域在网页运行时创建,在网页关闭时消耗
- 所有直接编写到script标签中的代码都位于全局作用域中
- 全局作用域中的变量是全局变量,可以在任意位置访问
局部作用域
- 块作用域
- 块作用域是一种局部作用域
- 块作用域在代码块执行时创建,代码块执行完毕它就销毁
- 在块作用域中声明的变量是局部变量,只能在块内部访问,外部无法访问
<script>
let a = "变量a"
{
let b = "变量b"
{
{
console.log(b)
}
}
}
{
console.log(b)
}
</script>
10、函数作用域
函数作用域
- 函数作用域也是一种局部作用域
- 函数作用域在函数调用时产生,调用结束后销毁
- 函数每次调用都会产生一个全新的函数作用域
- 在函数中定义的变量是局部变量,只能在函数内部访问,外部无法访问
<script>
function fn(){
let a = "fn中的变量a"
console.log(a)
}
fn()
console.log(a)
</script>
11、作用域链
- 当我们使用一个变量时,
JS解释器会优先在当前作用域中寻找变量,就近原则
如果找到了则直接使用
如果没找到,则去上一层作用域中寻找,找到了则使用
如果没找到,则继续去上一层寻找,以此类推
如果一直到全局作用域都没找到,则报错 xxx is not defined
<script>
// let a = 10
{
// let a = "第一代码块中的a"
{
// let a = "第二代码块中的a"
// console.log(a)
}
}
let b = 33
function fn(){
let b = 44
function f1(){
let b = 55
console.log(b)
}
f1()
}
fn()
</script>
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)