• JS作用域和ASP(vbs)作用域比较


    一、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

  • 相关阅读:
    linux下使用hash_map及STL总结
    编写Linux系统下Daemon程序的方法步骤
    c语言版网络爬虫spiderq
    利用unordered_map代替hash_map My Study
    Mike Wallace of '60 Minutes' to retire
    让Redis使用TCMalloc,实现高性能NOSql服务器
    守护进程的单实例实现_非宁静无以致远_百度空间
    sscanf,sscanf_s及其相关用法 小 楼 一 夜 听 春 雨 博客园
    实现个hash_map容器类玩玩 苍梧 博客园
    [Linux初级]Linux下动态库的生成及链接方法
  • 原文地址:https://www.cnblogs.com/echosong/p/3628718.html
Copyright © 2020-2023  润新知