一、js作用域,先上图:

以上代码执行的效果是,依次弹出 undefined, undefined, a, a,为什么是这样的结果啦?因为JS的作用域为链式作用域.

作用域链:

用VAR声明一个变量时,就为该变量所在的对象添加了一个属性,由于JS的变量都是对象的属性,而该对象可能又是其它对象的属性,而所有的对象都是WINDOWS属性,所以这些对象的关系可以看作一条链,链头就是变量的所处对象,链尾就是WINDOWS对象。

我们来分析一下上面函数中变量的作用域链。第一个alert输出的str,它的作用域链是str-自运行函数(+function)-windows,当执行自运行函数(+function)时,将创建函数的执行环境,并对该str置于链头,所以此str为自运行函数内的,但alert时,并没有为其赋值,所以此时输出str为undefined

第二个alert输出的str,它的作用域链是str-f2-自运行函数(+function)-windows,输出undefined原因同上。

第三个alert输出的str,它的作用域链是str-windows,所以输出a

第四个alert输出的str,它的作用域链同第三个。

理解了上面,我们来总结一下JS的作用域:

1、 JS没有var的变量都为全局变量,且为windows对象的属性(这个李源老师讲过了,我不再证明)

2、 函数内(函数内的函数除外)定义的变量在整个函数内部有效。

3、 函数内的变量取代全局同名变量。

4 、没块的使用域。(这个李源老师讲过了,我不再证明)

二、asp的使用域,同样先上图

以上代码输入字符串: 1 a 2 b 3

通过以上代码我们得出:

1、 函数中定义的变量的作用域是整个函数,不管变量在函数中那个位置定义。

2、 函数中同名的变量会取代全局变量。

3、 隐式声明的变量的作用域取决于其声明的位置,如果在函数中,则些变量只在函数中有效,如果在函数外,则整个页面有效。

4、 没有块级作用域。

VB中定义变量的作用域有Public/Private/Static、Dim,但在ASP中,并没有static。

在ASP中,我将作用域划分为页面级,类级,函数级,页面级和函数级用dim,类级用public/private

JS作用域和ASP(vbs)作用域比较的更多相关文章

  1. js学习之变量、作用域和内存问题

    js学习之变量.作用域和内存问题 标签(空格分隔): javascript 变量 1.基本类型和引用类型: 基本类型值:Undefined, Null, Boolean, Number, String ...

  2. 一个经典的js中关于块级作用域和声明提升的问题

    function functions(flag) { if (flag) { function getValue() { return 'a'; } } else { function getValu ...

  3. js对象系列【二】深入理解js函数,详解作用域与作用域链。

    这次说一下对象具体的一个实例:函数,以及其对应的作用域与作用域链.简单的东西大家查下API就行了,这里我更多的是分享自己的理解与技巧.对于作用域和作用域链,相信绝大多数朋友看了我的分享都能基本理解,少 ...

  4. JS基础:闭包和作用域链

    简介 一个定义在函数内部的函数与包含它的外部函数构成了闭包,内部函数可以访问外部函数的变量,这些变量将一直保存在内存中,直到无法再引用这个内部函数. 例如: var a = 0; function o ...

  5. js基础梳理-如何理解作用域和作用域链?

    本文重点是要梳理执行上下文的生命周期中的建立作用域链,在此之前,先回顾下关于作用域的一些知识. 1.什么是作用域(scope)? 在<JavaScritp高级程序设计>中并没有找到确切的关 ...

  6. js中的块级作用域

    概述 函数是js中最常见的作用域单元, 声明在一个函数内部的变量或函数会在所处的作用域中隐藏起来, 这是有意为之的非常好的设计原则. 但是随着js的发展, 我们有了某个代码块(通常指{..}内部)隐藏 ...

  7. js的函数作用域跟块级作用域

    js的函数作用域跟块级作用域(原文地址:http://blog.csdn.net/huangjq36sysu/article/details/51085674)

  8. js关于“变量提升、作用域、私有作用域等知识点”高级解题思路

    var i = 2,    x = 5;var fn = function (x) {    x += 3;    return function (y) {        console.log(( ...

  9. [js]函数的上级作用域,他的上级作用域就是谁,跟函数在哪执行的没什么关系.

    函数的上级作用域,他的上级作用域就是谁,跟函数在哪执行的没什么关系. <script> //如何查找上级作用域? //看函数在哪个作用域下定义的,他的上级作用域就是谁. 跟函数在哪执行的没 ...

随机推荐

  1. Codeforces Round #341 (Div. 2)B

    B. Wet Shark and Bishops time limit per test 2 seconds memory limit per test 256 megabytes input sta ...

  2. linux shell脚本攻略笔记

    前一阵子系统学习了下<linux shell脚本攻略>这本书.在此记录下自己的学习笔记 1. 输出颜色字符  echo -e "\e[1:41m" 1表示背景色   2 ...

  3. 详解ListView加载网络图片的优化

    我们来了解一些ListView在加载大量网络图片的时候存在的常见问题: 1.性能问题,ListView的滑动有卡顿,不流畅,造成非常糟糕的用户体验. 2.图片的错位问题. 3.图片太大,加载Bitma ...

  4. Spring总结以及在面试中的一些问题(山东数漫江湖)

    1.谈谈你对spring IOC和DI的理解,它们有什么区别? IoC Inverse of Control 反转控制的概念,就是将原本在程序中手动创建UserService对象的控制权,交由Spri ...

  5. 密码本(无bug版)

    main.cpp #include <stdio.h> #include <stdlib.h> #include "data.h" #include &qu ...

  6. 大聊Python----协程

    协程 协程,又称微线程,纤程.英文名Coroutine.一句话说明什么是线程:协程是一种用户态的轻量级线程. 协程拥有自己的寄存器上下文和栈.协程调度切换时,将寄存器上下文和栈保存到其他地方,在切回来 ...

  7. Python学习笔记 - day10 - 正则表达式

    正则表达式 字符串是编程时涉及到的最多的一种数据结构,对字符串进行操作的需求几乎无处不在.比如判断一个字符串是否是合法的Email地址,虽然可以编程提取@前后的子串,再分别判断是否是单词和域名,但这样 ...

  8. Django rest framework 版本控制(源码分析)

    基于上述分析 #2.处理版本信息 处理认证信息 处理权限信息 对用户的访问频率进行限制 self.initial(request, *args, **kwargs) #2.1处理版本信息 #versi ...

  9. jQuery Validate插件 验证实例

    官网地址:http://bassistance.de/jquery-plugins/jquery-plugin-validation Validate手册: http://www.cnblogs.co ...

  10. 自动化测试===Macaca环境搭建和说明书

    https://www.cnblogs.com/tim2016/p/6400326.html http://www.cnblogs.com/fnng/p/5873878.html https://ww ...