迹忆客 专注技术分享

当前位置:主页 > 学无止境 > WEB前端 > JavaScript >

JavaScript 词法作用域

作者:迹忆客 最近更新:2024/03/20 浏览次数:

在本文中,我们将借助示例了解 JavaScript 词法作用域。

词法作用域是一个技术术语,由词法和作用域这两个词组成。让我们分别理解它们中的每一个,然后作为一个整体返回到词法范围。


JavaScript 中的作用域是什么

范围表示诸如变量或函数之类的项目在程序中显而易见且可访问的位置。

我们可以说范围是指一个特定的区域、区域或空间。范围可以是全局的或本地的。

全局范围是指全局区域或公共空间,整个程序可以访问该特定区域中定义的变量和函数。

另一方面,局部范围意味着有界或受限区域。让我们练习以下代码示例来了解本地和全局范围。

let fullname = 'Mehvish Ashiq';

function displayAge() {
  let age = 30;
  return age;
}
function displayInfo() {
  console.log(fullname + ' is ' + displayAge() + ' years old');
}

displayInfo();

输出

"Mehvish Ashiq is 30 years old"

在上面的代码中,我们有一个全局范围的变量 fullname,可以在此脚本中的任何位置引用。

同样,函数 displayAge()displayInfo() 也具有全局范围,但变量 age 仅限于 displayAge() 函数,这意味着它只能在此函数内访问。

让我们再举一个例子来说明这个概念。

let fullname = 'Mehvish Ashiq';

function displayInfo() {
  function readName() {
    function writeName() {
      return fullname;
    }
  }
  function displayAge() {
    let age = 30;
    return age;
  }
  console.log(fullname + ' is ' + displayAge() + ' years old');
}

displayInfo();

输出

"Mehvish Ashiq is 30 years old"

让我们用下图来理解上面的代码,以更好地可视化范围。

我们可以看到 fullname 有一个全局范围,但它没有被直接引用。它是从 writeName() 函数访问的,这是因为范围链。

还需要注意的是,我们可以在内部范围内访问外部范围变量,反之则不行。

例如,我们可以访问 writeName() 方法中的 fullname,但不能访问 displayAge() 函数之外的 age 变量。这意味着孩子可以使用父母的属性,但父母不能使用孩子的属性。


JavaScript 中的词法是什么

词法指出事物的定义。它意味着关于创建表达式、变量或单词的任何内容。

现在,我们分别知道范围和词法。让我们把它们结合起来,试着理解词法作用域是什么意思?


JavaScript 中的词法作用域作为一个整体

词法范围是表达式的定义区域。更简单地说,它是指创建项目的地方或地区。

词法作用域也称为静态作用域。让我们看下面的示例代码来说明词法范围。

// Define a variable in the global scope
let fullname = 'Mehvish Ashiq';

// Call fullname variable from a function
function printName() {
  return fullname;
}

我们编写了一个 printName() 函数来访问在全局范围内定义的 fullname 变量。请注意,我们在全局范围内声明并初始化了 fullname,但在 printName() 的本地范围内调用。

那么,fullname 的词法范围是什么?永远记住,词法范围仅与定义空间有关。

它与调用空间无关。因此,fullname 的词法范围是全局范围,因为它是在全局环境中定义的。

让我们看另一个例子来理解词法作用域。

function outerFunction() {
  var name = 'Mehvish';
  // We can not access 'likes' variable here
  function innerFunction() {
    // the 'name' variable is accessible here
    // the 'likes' variable is not accessible here
    function innerMostFunction() {
      // Here is the innermost level of the scope chain
      // We can also access the 'name' variable here
      var likes = 'Reading';
    }
  }
}

这里 name 的词法范围是 outerFunction() 的本地范围。类似地,likes 的词法作用域是 innerMostFunction() 的局部作用域。

现在,你可能想知道为什么词法作用域如此重要?这是因为词法作用域告诉如何在嵌套函数中解析变量名,这意味着内部函数具有父函数的作用域,即使该(父函数)已返回。

上一篇:JavaScript Z 索引

下一篇:JavaScript 导出类

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

Do you understand JavaScript closures?

发布时间:2025/02/21 浏览次数:108 分类:JavaScript

The function of a closure can be inferred from its name, suggesting that it is related to the concept of scope. A closure itself is a core concept in JavaScript, and being a core concept, it is naturally also a difficult one.

Do you know about the hidden traps in variables in JavaScript?

发布时间:2025/02/21 浏览次数:178 分类:JavaScript

Whether you're just starting to learn JavaScript or have been using it for a long time, I believe you'll encounter some traps related to JavaScript variable scope. The goal is to identify these traps before you fall into them, in order to av

How much do you know about the Prototype Chain?

发布时间:2025/02/21 浏览次数:150 分类:JavaScript

The prototype chain can be considered one of the core features of JavaScript, and certainly one of its more challenging aspects. If you've learned other object-oriented programming languages, you may find it somewhat confusing when you start

用 jQuery 检查复选框是否被选中

发布时间:2024/03/24 浏览次数:102 分类:JavaScript

在本教程中学习 jQuery 检查复选框是否被选中的所有很酷的方法。我们展示了使用直接 DOM 操作、提取 JavaScript 属性的 jQuery 方法以及使用 jQuery 选择器的不同方法。你还将找到许多有用的

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便