JavaScript Lexical Scope

转载 2015年07月11日 00:50:34

I understand them through examples :)

First, Lexical Scope (also called Static Scope), in C-like syntax:

void fun()
{
    int x = 5;

    void fun2()
    {
        printf("%d", x);
    }
}

Every inner level can access its outer levels.

There is another way, called Dynamic Scope used by first implementation of Lisp, again in C-like Syntax:

void fun()
{
    printf("%d", x);
}

void dummy1()
{
    int x = 5;

    fun();
}

void dummy2()
{
    int x = 10;

    fun();
}

Here fun can either access x in dummy1 or dummy2, or any x in any function that call fun with x declared in it.

dummy1();

will print 5

dummy2();

will print 10

The first one is called static because it can be deduced at compile-time, the second is called dynamic because the outer scope is dynamic and depends on the chain call of the functions.

I find static scoping easier for the eye. Most languages went this way eventually even Lisp (can do both, right?). Dynamic scoping is like passing references of all variables to the called function.

An example of why the compiler can not deduce the outer dynamic scope of a function, consider our last example, if we write something like this:

if(/* some condition */)
    dummy1();
else
    dummy2();

The call chain depends on a run time condition. If it is true, then the call chain looks like:

dummy1 --> fun()

If the condition is false:

dummy2 --> fun()

The outer scope of fun in both cases is the caller plus the caller of the caller and so on.

Just to mention that C language does not allow nested functions nor dynamic scoping.

干货!你一直想知道的关于JavaScript scope(域)的一切

这篇文章旨在帮助那些在听说过诸如域(scope),闭包(closure),关键字this,命名空间(namespace),函数域(function scope),全局域(global scope),词...
  • s1651037998
  • s1651037998
  • 2015年09月02日 22:20
  • 969

Spring配置Scope属性注意点

Spring的配置bean元素时,其scope属性取值有如下几个:  1. singleton:单例模式,即该bean对应的类只有一个实例;在spring 中是scope(作用范围)参数的默认值 ;...
  • jamesge2010
  • jamesge2010
  • 2017年02月24日 14:09
  • 443

对AngularJs中$scope的深入理解

$scope在AngularJS中可谓十分重要,是AngularJS中MVC的基础,也是实现双向数据绑定的基础,那么我们该如何理解$scope呢? 首先,$scope本身是一个普通的JavaScri...
  • key_next
  • key_next
  • 2016年04月19日 20:53
  • 2190

菜鸟学习Struts——Scope属性

一、概念。     在Action映射配置中,Scope属性可以取值为:request或session。Scope属性表示:Struts框架在将     ActionForm对象(与目标Action...
  • gwblue
  • gwblue
  • 2014年03月11日 21:13
  • 4862

Spring中的scope配置和@scope注解

Scope,也称作用域,在 Spring IoC 容器是指其创建的 Bean 对象相对于其他 Bean 对象的请求可见范围。在 Spring IoC 容器中具有以下几种作用域:基本作用域(reques...
  • Tracycater
  • Tracycater
  • 2017年01月04日 14:43
  • 5252

maven中scope标签详解

前言最近在做itoo的pom优化工作,发现对于maven依赖管理中的scope标签还是有不明白的地方,所以今天就来总结一下这方面的知识,scope在maven的依赖管理中主要负责项目的部署maven的...
  • cd18333612683
  • cd18333612683
  • 2017年03月26日 19:43
  • 1387

Maven依赖中的scope详解

Maven的一个哲学是惯例优于配置(Convention Over Configuration), Maven默认的依赖配置项中,scope的默认值是compile,项目中经常傻傻的分不清,直接默认了...
  • kimylrong
  • kimylrong
  • 2015年12月18日 17:36
  • 34713

细谈Struts2框架(二)Struts2框架之Scope属性

新接到了一个模块,增删改查功能都基本上实现了,但是当我点击修改的时候,返回去再点添加的时候,发现修改的数据回显出现在添加里! 修改的取消,返回到列表页面时,查询条件框中带回值。弄了一上午都没有找出来是...
  • huo_yun
  • huo_yun
  • 2015年09月28日 23:42
  • 2266

AngularJS自定义指令directive:scope属性

一、介绍:在AngularJS中,除了内置指令如ng-click等,我们还可以自定义指令。自定义指令,是为了扩展DOM元素的功能。代码中,通过指定directive中的restrict属性,来决定这个...
  • VitaLemon__
  • VitaLemon__
  • 2016年08月15日 17:29
  • 13225

Spring scope属性详解

摘自《Spring 解密》 scope用来声明IOC容器中的对象应该处的限定场景或者说该对象的存活空间,即在IOC容器在 对象进入相应的scope之前,生成并装配这些对象,在该对象不再处于这些s...
  • smile_from_2015
  • smile_from_2015
  • 2016年04月27日 11:05
  • 1627
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JavaScript Lexical Scope
举报原因:
原因补充:

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