通俗易懂详解Scope

原创 2016年09月09日 15:31:45
简单认识js作用域
var a = 1;

if(true){
    var b = 1;
}

console.log(b) //1

在面向对象的强语言中(Java,C……),其作用域都是基于块的(即:{}),块内可以对块外的变量进行操作,但是块外却对块内的变量是无法操作的。但是JS呢?一门弱语言,其并没有实现基于块的作用域,而是基于function的,因此上面的代码运行出来的结果b并不是undefined,说明最终a和b是定义在一个Scope内的。

预编译(变量提升)
var a = 1;
var b = 2;

function doit(){
    console.log(b);
    var b = 3;
    console.log(b);
}

doit();

console.log(b);

//undefined
//3
//2

相当于下面

var a = 1;
var b = 2;

function doit(){
    var b;
    console.log(b);
    b = 3;
    console.log(b);
}

doit();

console.log(b);

//undefined
//3
//2

讲到了Scope,不得不讲一讲js的预编译,为什么我们得到的第一个log的结果为undefined呢?按照强语言的思路来说这里应该是2才对呀,这就是js的预编译。js的代码在首次被加载完成后进行编译时,会将所有的function和var提前进行声明,但是并不会对其进行赋值,赋值则都是在该代码块进行执行时才会对其进行赋值,那么第一个log则是在预编译为b进行了声明后,这时b是没有时行赋值的,所以会log出undefined。

由于js是基于function来创建Scope的,所以只有doit执行时才会创建新的Scope

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/biaogeshiwo/article/details/52487699

手机拍摄的书页

下一步,我们还要支持MBlog。用手机拍摄后,直接可以通过彩信发送到Blog。
  • grhunter
  • grhunter
  • 2004-03-29 23:11:00
  • 1936

vlan技术详解(说得很通俗易懂)

http://www.cs.wustl.edu/~jain/cis788-97/ftp/virtual_lans/index.htm
  • xunileida
  • xunileida
  • 2011-11-20 00:19:34
  • 696

Spring中scope singleton 和 prototype详解

Singleton The singleton scope Only one shared instance of a singleton bean is managed, and a...
  • yjjy0921
  • yjjy0921
  • 2014-12-17 11:51:37
  • 2361

spring中的scope详解

0.思维导图 1. scope概论 spring中scope是一个非常关键的概念,简单说就是对象在spring容器(IOC容器)中的生命周期,也可以理解为对象在spring容器中的创建方式。 2...
  • weinabanta
  • weinabanta
  • 2014-10-16 22:40:00
  • 29709

大白话讲解ThreadLocal的原理

ThreadLocal顾名思义,本地线程,可以理解为本地线程变量,说白了就是操作本地线程的局部变量。 下面我们通过源码进行说明: 首先,我们看一下ThreadLocal的set方法源码实现: p...
  • qq_30698633
  • qq_30698633
  • 2017-08-12 17:10:36
  • 112

Angular Scope解析与应用

Scope层级结构顶层服务对象$rootScope来源于ng模块,由$RootScopeProvider提供。因为ng模块是angular.bootstrap()执行时依赖的模块,所以在整个应用中都可...
  • woxueliuyun
  • woxueliuyun
  • 2016-04-06 10:50:10
  • 3995

通俗易懂地讲解牛顿迭代法求开方

五次及以上多项式方程没有根式解(就是没有像二次方程那样的万能公式),这个是被伽罗瓦用群论做出的最著名的结论。但是,没有王屠夫难道非得吃带毛猪?工作生活中还是有诸多求解高次方程的真实需求(比如行星的轨道...
  • Scythe666
  • Scythe666
  • 2017-07-11 15:43:14
  • 557

C++ Scope Exit

最近在新的项目中帮忙时有对于SCOPE_EXIT的使用,对于这个能够在任何异常或者正常的时候都能执行,这好像是一个很牛逼的代码,激起了我的兴趣,于是瞅了一下这段代码:#include...
  • haust_wang
  • haust_wang
  • 2016-01-22 16:05:19
  • 1047

[AngularJS面面观] 9. scope事件机制 - 基本概念以及生命周期

发布-订阅模式(Publish-Subscribe Pattern) 事件的生命周期-注册和注销 事件与scope继承树-$emit以及$broadcast 事件的停止传播以及阻止默认行为 事件在sc...
  • dm_vincent
  • dm_vincent
  • 2016-07-04 00:09:07
  • 4737

主席树(静态) 图文讲解让你一次就懂 hdu2665为例

主席树学了几天才算初步了解了,我先讲一下无修改即静态的主席树,之后在讲带修改即动态的主席树。主席树比较抽象,感觉很难没有图只靠文字理解。 接下来进入正题参考博客:http://www.cnblogs...
  • WilliamSun0122
  • WilliamSun0122
  • 2017-09-07 18:15:16
  • 341
收藏助手
不良信息举报
您举报文章:通俗易懂详解Scope
举报原因:
原因补充:

(最多只允许输入30个字)