js变量作用域

2016-11-24  本文已影响0人  angelwgh

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


静态作用域

var x = 10 ;
function foo(){
    alert(x);
}
function bar(){
    var x = 20;
    foo();
}

bar()

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

动态作用域

JS变量作用域

词法环境

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

词法环境-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没有效果

上一篇 下一篇

猜你喜欢

热点阅读