Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >JavaScript几个作用域问题

JavaScript几个作用域问题

作者头像
寒月十八
发布于 2018-01-30 03:41:18
发布于 2018-01-30 03:41:18
58200
代码可运行
举报
运行总次数:0
代码可运行

1、

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var a = 0 ;

function f(){
  a = 1;
  console.log(a); //全局变量a
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
} console.log(a); //全局变量af();

 输出结果为:1 1 ,function中未声明直接赋值的a为作用域window的全局变量,很好理解

2、

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var a = 0;
 function test(){
      var a;
      console.log(a); //局部变量a
      a = 1;
      console.log(a); //局部变量a
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
} test(); conosle.log(a); //全局变量a

  输出结果为:undefined 1 0

3、

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    var a =0;
    function test(){
       console.log(a);
       var a = 1;
       console.log(a);
    }

    test();
    console.log(a);

  输出结果为:undefined 1 0 

总结:

1. JavaScript中只存在两种作用域:全局作用域window和函数作用域function,外部的function domain嵌套内部的function domain,这就是闭包原理;

2. function domain中未使用var事先声明而直接赋值或调用的变量会访问上一层作用域中的同名变量,一直到window全局domain,如果找不到则会报错;

3. var声明变量的执行优先级是最高的,所以在例子3中test()中第一次console.log(a)执行之前,已经事先执行了var a声明,但并未执行a = 1赋值,所以此时输出undefined

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2014-02-07 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
理解JavaScript的作用域
当一个块或函数嵌套在另一个块或函数中时,就发生了作用域的嵌套。作用域嵌套的查询规则:
4O4
2022/04/25
7980
详解作用域链
在本文中,我们将着重讨论作用域链。首先我们会了解作用域、块级作用域、相关的一些重要概念等前置基础知识,接着我们会通过几个例子来对作用域链进行详细讲解,最后我们还会涉及作用域链延长的问题。在了解完上述知识之后,在本文主要内容的最后,我们还精选了网上几个作用域链相关的题目供小伙伴思考。
石璞东
2020/05/22
6290
JS作用域与闭包
全局变量在函数外定义,HTML中全局变量是window对象,所有数据对象都属于window对象。
用户7353950
2022/06/23
2.1K0
JS作用域与闭包
js中的作用域
相信自从es6出来之后,你一定多少知道或者已经在项目中实践了部分的块级作用域,在函数或者类的内部命名变量已经在使用let了,但是你知道它真正的作用是什么吗?又是因为什么我们要用这个块级作用域,本文与你一起探讨块级作用域的场景以及所有细节问题。
RobinsonZhang
2018/08/28
3.7K0
前端基础-JavaScript作用域与JS代码的运行
变量的作用域是在定义时决定而不是执行时决定的,也就是说词法作用域取决于编译阶段,通过静态分析就能确定,因此词法作用域也叫做静态作用域。
cwl_java
2020/03/26
1.4K0
JavaScript经典作用域问题(转载)
注:本文转自 javascript经典面试题 全局变量和局部变量 变量作用域 如需转载,请注明出处:https://www.cnblogs.com/zhuchenglin/p/9568365.html
lin_zone
2018/09/03
4040
【前端】JavaScript 的神奇世界:作用域、闭包和变量提升的深入探索
对于输入的数组 A 为 ['jojo', 'okko', '张三', '秃头', '帅小伙'],数组 B 为 ['你好', '小脑斧', '大西瓜', '长得帅'],最终输出为:
CSDN-Z
2025/06/02
910
【前端】JavaScript 的神奇世界:作用域、闭包和变量提升的深入探索
JavaScript 作用域和作用域链
作用域就是变量与函数的可访问范围。在JavaScript中,变量的作用域有全局作用域和局部作用域两种。
零式的天空
2022/03/02
2K0
JavaScript的变量及作用域(清晰版)
JS是一门弱类型(松散型)的语言,这也就是说其天生就与众不同,独领风骚! 在讲解变量作用域之前,我们先来了解一下JS中的变量。JS中的变量与其它语言有很大的不同,由于JS变量拥有松散(不强制)的本质,从而决定了其只是一个在特定阶段保持特定类型值的名字。
用户1272076
2019/03/26
5850
JS进阶-作用域
定义:局部作用域的意思就是,变量只能在它的代码块或者函数内部访问,而不能在外部访问,局部作用域的变量在函数或代码块执行完后会销毁,不会影响全局作用域变量。
吃猫的鱼Code
2025/02/11
3520
js作用域详解
声明a=1;a属于number类型,但是number类型又是number对象,有着以下方法:
仙士可
2019/12/19
2.8K0
js作用域详解
初探JavaScript(四)——作用域链和声明提前
前言:最近恰逢毕业季,千千万万的学生党开始步入社会,告别象牙塔似的学校生活。往往在人生的各个拐点的时候,情感丰富,感触颇深,各种对过去的美好的总结,对未来的展望。与此同时,也让诸多的老“园”工看完这些小年轻的文章后感触良多,不禁也要写上几笔,所以就出来了很多类似“毕业两年小记”、“毕业五年有感”……   可能就是某篇博文的一句话,某碗心灵鸡汤就拨动了你心里的那根尘封已久的弦,让你情不自禁的点了个赞,还忍不住的要在下面评论区留下自己此刻心潮澎湃的印记。 我今天不是来送鸡汤的,鸡汤虽好,可不要贪杯哦。 正文
JackieZheng
2018/01/16
7960
初探JavaScript(四)——作用域链和声明提前
作用域及作用域链的解释说明
javascript中作用域是指变量与函数可访问的范围。作用域分为两类,一种是全局作用域,一种是局部作用域。全局变量拥有全局作用域,在JavaScript代码中的任何地方都有定义。局部变量是在函数体内声明而且只作用在函数体内部以及该函数体的子函数的变量。下面我们对全局作用域和局部作用域来做一个深入的理解。
OECOM
2020/07/02
1.3K0
作用域及作用域链的解释说明
了解 JS 作用域与作用域链
不在任何函数内声明的变量(函数内省略var的也算全局)称作全局变量(global scope)
书童小二
2018/09/03
2.3K0
JavaScript——作用域和闭包
本文着重于对 JavaScript 中的作用域和闭包机制进行剖析和说明,闭包本质上也是作用域的一种类型,因为在 JavaScript 里非常重要,所以我们把它在标题里单独列出来。
Html5知典
2019/11/26
7890
JavaScript——作用域
通常来说,一段程序代码中所用到的名字并不是总有效和可用的,而限定这个名字的可用性的代码范围就是这个名字的作用域,作用域的使用提高了程序逻辑的局部性,增强了程序的可靠性,减少了名字冲突。
岳泽以
2022/10/26
4350
【前端】JavaScript作用域与预解析:深入理解问题与解答
在 JavaScript 中,函数声明的提升优先于变量声明。这意味着函数会被完整地提升到作用域的顶部,并且在变量声明之前可以使用。但变量声明只会被提升声明,赋值操作仍然保留在原地。
CSDN-Z
2024/11/26
1640
【前端】JavaScript作用域与预解析:深入理解问题与解答
前端入门17-JavaScript进阶之作用域声明正文-作用域
作为一个前端小白,入门跟着这几个来源学习,感谢作者的分享,在其基础上,通过自己的理解,梳理出的知识点,或许有遗漏,或许有些理解是错误的,如有发现,欢迎指点下。
请叫我大苏
2018/12/24
5920
前端入门17-JavaScript进阶之作用域声明正文-作用域
深入理解作用域和闭包
JavaScript中的变量是松散类型的,没有规则定义它必须包含什么数据类型,它的值和数据类型在执行期间是可以改变的。
神奇的程序员
2022/04/10
6250
深入理解作用域和闭包
你不知道的javascript—作用域、闭包「建议收藏」
JavaScript 中有两个机制可以“欺骗”词法作用域:eval(..) 和 with。 前者可以对一段包 含一个或多个声明的“代码”字符串进行演算,并借此来修改已经存在的词法作用域(在 运行时)。 后者本质上是通过将一个对象的引用当作作用域来处理,将对象的属性当作作 用域中的标识符来处理,从而创建了一个新的词法作用域(同样是在运行时)。
全栈程序员站长
2022/07/20
5620
相关推荐
理解JavaScript的作用域
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档