美文网首页
js变量作用域

js变量作用域

作者: angelwgh | 来源:发表于2016-11-24 20:46 被阅读0次

    title: 变量作用域
    date: 2016-11-24 19:58:57
    tags: javascript
    categories:

    • javascript

    静态作用域

    • 又称此法作用域
    • 由程序定义的位置决定
    var x = 10 ;
    function foo(){
        alert(x);
    }
    function bar(){
        var x = 20;
        foo();
    }
    
    bar()
    

    这里执行foo()函数时,由于其内部没有定义x,程序就会到其外层作用域(全局)寻找

    动态作用域

    • 由程序运行的时刻决定

    JS变量作用域

    • js使用静态作用域
    • js没有块级作用域(全局作用域,函数作用域)
    • ES5中使用词法环境管理静态作用域

    词法环境

    • 环境记录
      • 形参
      • 函数声明
      • 变量
    • 对外部环境的引用(outer)

    环境记录初始化-声明提前
    全局代码或者函数代码执行前,先把函数声明、变量定义到环境记录里面

    词法环境-width

    var foo = "abc";
    width ({
        foo: "bar"
        }) {
            function f(){
                alert(foo);
            };
            (function(){
                alert(foo);
            })();
            f();
        }
    

    with传入一个对象,并把这个对象定义到临时词法环境里面,创建一个临时作用域
    这里函数表达式会使用这个作用域,而函数声明还是使用全局作用域

    词法环境 try-catch

    try{
        var e = 10;
        throw new Error();
    }catch(e){
        function f(){
            alert(foo);
        };
        (function(){
            alert(foo);
        })();
        f();
    }
    

    catch会创建一个临时环境,执行匿名函数是会使用这个临时环境,而函数声明的环境还是指向全局环境

    带函数名称的函数表达式

    (function A(){
        A = 1;
        alert(A);
        })()
    

    这里在执行时换创建一个新的词法环境,把A定义到这个环境记录里,并且A无法被修改,所以这里语句 A=1没有效果

    相关文章

      网友评论

          本文标题:js变量作用域

          本文链接:https://www.haomeiwen.com/subject/yrcipttx.html