当前位置: 首页 > 知识库问答 >
问题:

javascript实现词法作用域吗?[副本]

鲍理
2023-03-14

为什么这个返回2而不是1?似乎第二个“VAR”被默默忽略了。

function foo()
{
  var local = 1;
  {
    var local = 2;
  }
  return local;
}
foo()
/*
2
*/

共有2个答案

秦博达
2023-03-14

从MDN:

JavaScript没有block语句作用域;相反,块中声明的变量是块所在函数(或全局范围)的局部变量。

JavaScript中变量的作用域是声明它的整个函数(或全局作用域),因此您在这里只有一个变量local

您的代码相当于

function foo()
{
  var local;
  local = 1;
  {
    local = 2;
  }
  return local;
}
foo()

请注意,ES6(JavaScript的新规范)确实引入了let的词法作用域,但它还不是真正可用的。

边明煦
2023-03-14

javascript中,只有函数级作用域和全局作用域。您不能创建块作用域,它不会添加任何特殊含义,也不会创建任何作用域。

这就是你的代码最终

function foo()
{
  var local = 1;
  local = 2;
  return local;
}
foo();

在ES6中,您可以在let的帮助下创建块级作用域。尚不支持ES6。这里有更多关于这个的内容

 类似资料:
  • 本文向大家介绍JavaScript进阶(二)词法作用域与作用域链实例分析,包括了JavaScript进阶(二)词法作用域与作用域链实例分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JavaScript词法作用域与作用域链。分享给大家供大家参考,具体如下: 一、作用域 域表示的就是范围,即作用域,就是一个名字在什么地方可以使用,什么时候不能使用。想了解更多关于作用域的问题推荐阅读《你不

  • 主要内容:JS 全局作用域,JS 局部作用域在 JavaScript 中,您可以在任意位置声明变量,但不同的位置会影响变量的可用范围,这个范围称为作用域。作用域可以大致分为两种类型,分别是全局作用域和局部作用域。下面就来分别介绍一下。 JS 全局作用域 全局作用域是指变量可以在当前脚本的任意位置访问,拥有全局作用域的变量也被称为“全局变量”,一般情况下拥有以下特征的变量具有全局作用域: 最外层的函数和在最外层函数外面定义的变量拥有全局作用域

  • 本文向大家介绍javascript作用域链(Scope Chain)用法实例解析,包括了javascript作用域链(Scope Chain)用法实例解析的使用技巧和注意事项,需要的朋友参考一下 本文实例分析了javascript作用域链(Scope Chain)用法。分享给大家供大家参考,具体如下: 关于js的作用域链,早有耳闻,也曾看过几篇介绍性的博文,但一直都理解的模棱两可。近日又精心翻看了

  • 本文向大家介绍JavaScript作用域链实例详解,包括了JavaScript作用域链实例详解的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JavaScript作用域链。分享给大家供大家参考,具体如下: 跟其他语言一样,变量和函数的作用域揭示了这些变量和函数的搜索路径。对于JavaScript而言,理解作用域更加重要,因为在JavaScript中,作用域可以用来确定this的值,并且Ja

  • 本文向大家介绍详解JavaScript作用域、作用域链和闭包的用法,包括了详解JavaScript作用域、作用域链和闭包的用法的使用技巧和注意事项,需要的朋友参考一下 1. 作用域 作用域是指可访问的变量和函数的集合。 作用域可分为全局作用域和局部作用域。 1.1 全局作用域 全局作用域是指最外层函数外面定义的变量和函数的集合。 换言之,这些最外层函数外面定义的变量和函数在任何地方都能访问。 举个

  • 我正在设计一个javascript实用程序,它需要在UNIX中grep一个密码文件('ypcat passwd grep')。PERL使用“backtick”或System来运行命令行。Python使用os.system。JavaScript中有类似的方法吗?