javascript作用域

来源:互联网 发布:环信java服务端demo 编辑:程序博客网 时间:2024/06/16 19:38

JS作用域:

在JS中,函数嵌套是非常普遍的,在函数嵌套中对变量是如何寻找的?

答:首先在函数内寻找,找不到则往外层寻找,直到全局(window)区域


例子:


function t1() {
    var d;

    function t2() {
        d = 5;
        e = 6;
    }

    t2();
}

t1();

console.log(e);//6
console.log(d);//d is not defined错误
console.log(window.d);//undefine

/*
上面的输出结果解析:
代码运行到t2中的d=5时,系统则寻找变量d,找到上面的d,将5赋值给d变量,然后运行到e=6时,系统寻找e变量,但是在全局中找不到,则执行window.e=6赋值操作,console.log(e)输出的是全局的变量,而console.log(d)输出的是局部变量,所以报错
*/

/*
注意:
以window.xxx引用全局变量,寻找不到,作为某个属性不存在,返回undefine
直接以xxx引用某变量,寻找不到,则是报xx is not defined
*/


var str1 = 'global';

function t1() {
    console.log(str1);
    console.log(str2);

    var str2 = 'local';
}

t1();  //global  undefined

/*
解析:
js代码自上而下执行
但是js代码在整体运行分:
词法分析期 运行期

自上而下执行之前,先有一个词法分析过程

此上面的结果为例:
第一步:分析t1函数
t1{
    var str2    //分析出t1内有str2局部变量,注意此时函数未执行,因此str2的值为undefined
}

第二步:执行t1函数
    console.log(str1);  //global
    console.log(str2);  //undefined
    str2 = 'local';     //此时,str2的值为local

*/


0 0