专栏首页前端架构与工程JavaScript几个作用域问题

JavaScript几个作用域问题

1、

var a = 0 ;

function f(){
  a = 1;
  console.log(a); //全局变量a
} console.log(a); //全局变量af();

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

2、

var a = 0;
 function test(){
      var a;
      console.log(a); //局部变量a
      a = 1;
      console.log(a); //局部变量a
} test(); conosle.log(a); //全局变量a

  输出结果为:undefined 1 0

3、

    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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 《JQuery技术内幕》读书笔记——自调用匿名函数剖析

    Javascript语言中的自调用匿名函数格式如下: (function(){ //do somethings })(); 它还有另外两种等价写法如下: //等...

    寒月十八
  • Nodejs建站笔记-注册登录流程的简单实现

    1. 使用Backbone实现前端hash路由 登录注册页面如下: ? 初步设想将注册和登录作为两个不同的url实现,但登录和注册功能的差距只有form表单...

    寒月十八
  • 【译】《Understanding ECMAScript6》- 第一章-基础知识(一)

    目录: 更好的Unicode编码支持 codePointAt()函数 String.fromCodePoint() 用转义序列对Non-BMP字符编码 nor...

    寒月十八
  • 《你不知道的js(上卷)》笔记1(基础知识和闭包)

    首先,读本书让我了解到js的最重要的两个知识点——闭包还有this指向,其次一点的就是编译原理和对象原形。

    陨石坠灭
  • (建议收藏)原生JS灵魂之问, 请问你能接得住几个?(上)

    笔者最近在对原生JS的知识做系统梳理,因为我觉得JS作为前端工程师的根本技术,学再多遍都不为过。打算来做一个系列,一共分三次发,以一系列的问题为驱动,当然也会有...

    桃翁
  • 原生JS的知识系统梳理

    笔者最近在对原生JS的知识做系统梳理,因为我觉得JS作为前端工程师的根本技术,学再多遍都不为过。打算来做一个系列,一共分三次发,以一系列的问题为驱动,当然也会有...

    前端迷
  • 原生JS灵魂考核, 你能回答出来几题?

    笔者最近在对原生JS的知识做系统梳理,因为我觉得JS作为前端工程师的根本技术,学再多遍都不为过。打算来做一个系列,一共分三次发,以一系列的问题为驱动,当然也会有...

    Nealyang
  • JavaScript 常见面试题分析(二)

    ④ call() 方法 apply() 方法 bind() 方法 (this 指向第一个参数)

    Nian糕
  • 代码重构那些事儿

    大家好,这是我今天演讲的目录,分Java,JavaScript,ABAP三门编程语言来讲述。

    Jerry Wang

扫码关注云+社区

领取腾讯云代金券