js中的作用域和作用域链,你未必能分清,用代码示例告诉你。

有很多小伙伴分不清二者,看了网上教程也是很迷茫,好吧让我告诉你吧。

一、作用域和作用域链

作用域是指在程序中变量和函数的可访问性和可见性范围。作用域决定了在哪些地方可以访问到变量和函数,以及在哪些地方可以对其进行修改和调用。

作用域链是指在程序中变量和函数的作用域嵌套关系。当程序中存在多个作用域时,作用域链可以帮助确定变量和函数的查找顺序。当在当前作用域无法找到变量或函数时,程序会沿着作用域链向上查找,直到找到为止。这样可以确保程序能够正确地访问和使用变量和函数。


二、二者的区分

在 JavaScript 中,作用域和作用域链也是指变量和函数的可访问性和可见性范围,以及它们的嵌套关系。但是,作用域链在 JavaScript 中是指在函数作用域中,变量和函数的查找顺序。

作用域是指变量和函数的可访问性范围,分为全局作用域和局部作用域。全局作用域中的变量和函数可以在整个程序中被访问,而局部作用域中的变量和函数只能在定义它们的函数内部被访问。

作用域链是指在函数作用域中,变量和函数的查找顺序。当在函数内部访问一个变量或函数时,JavaScript 引擎会先在当前函数的作用域中查找,如果找不到,就会沿着作用域链向上查找,直到找到为止。

因此,作用域是指变量和函数的可访问性范围,而作用域链是指在函数作用域中,变量和函数的查找顺序。


三、全局作用域和局部作用域

全局作用域和局部作用域是JavaScript中的两种作用域类型。

全局作用域是指在整个JavaScript程序中都可以访问的作用域,其中定义的变量和函数可以被程序中的任何地方访问。全局作用域中定义的变量和函数通常在程序的顶层声明,即不在任何函数内部。

局部作用域是指在函数内部定义的作用域,其中的变量和函数只能在该函数内部被访问。当在函数内部声明变量时,这些变量只在该函数内部可见,外部无法访问。

以下是一个简单的示例,演示了全局作用域和局部作用域的概念:

// 全局作用域
var globalVar = 'I am global'; // 全局变量

function outerFunction() {
  // 局部作用域
  var outerVar = 'I am local'; // 局部变量

  console.log(globalVar); // 可以访问全局变量
  console.log(outerVar); // 可以访问局部变量
}

outerFunction();

console.log(globalVar); // 可以在全局范围内访问全局变量
console.log(outerVar); // 无法在全局范围内访问局部变量,会报错

在这个示例中,globalVar 是一个全局变量,可以在整个程序中访问。而 outerVar 是在 outerFunction 函数内部声明的局部变量,只能在该函数内部访问。


四、作用域和作用域链的代码演示

当在 JavaScript 中使用作用域和作用域链时,可以通过以下示例来理解其概念:

// 全局作用域
var globalVar = 'I am global';

function outerFunction() {
  // 外部函数作用域
  var outerVar = 'I am outer';

  function innerFunction() {
    // 内部函数作用域
    var innerVar = 'I am inner';
    
    console.log(globalVar); // 可以访问全局作用域的变量
    console.log(outerVar); // 可以访问外部函数作用域的变量
    console.log(innerVar); // 可以访问当前函数作用域的变量
  }

  innerFunction();
  console.log(innerVar); // 无法访问内部函数作用域的变量,会报错
}

outerFunction();
console.log(outerVar); // 无法访问外部函数作用域的变量,会报错

在这个示例中,全局作用域中定义了一个全局变量 globalVar。然后在 outerFunction 函数中定义了一个外部函数作用域的变量 outerVar,以及一个内部函数 innerFunction,在内部函数中定义了一个内部函数作用域的变量 innerVar。

在内部函数中,可以访问到全局作用域、外部函数作用域和当前函数作用域的变量。而在外部函数和全局作用域之外,无法直接访问内部函数作用域和外部函数作用域的变量。这就是作用域链的概念。

你理解了吗?

Hi,我是贝格前端工场,10年前端和UI老司机了,持续为大家分享有价值、有见地的观点、作品、干货,欢迎评论、关注、点赞、有事请私信。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

贝格前端工场

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值