JS基础知识积累

1、undefined返回不同的场景。
以window.xxx引用全局变量,寻找不到,会作为某个属性不存在,返回undefined.
直接以XXX引用某变量,寻找不到,则是报xxx is not defined错误。

2、作用域问题。

//场景1
var str1 = 'global';
function t1(){
    console.log(str1); //global
    console.log(str2); // undefined
    var str2 = 'local';
}
t1();
//场景2
var str1 = 'global';
function t1(){
    console.log(str1); //global
    console.log(str2); // str2 is not defined
    str2 = 'local';
}
t1();
//场景3
function a(b){
    alert(b);
    function b(){
        alert(b);
    }
    b();
}
a(1);//答案为两个b函数

总结:
JS代码执行:
a、先进行词法分析(预编译)
分析参数–>分析变量声明–>分析函数声明;
具体步骤:
1:函数运行前一瞬间,生成Active Object(活动对象),下称AO;
2:把收到的参数,形成AO的属性,参数的值即属性的值
3:分析变量声明!如var age;
如果AO上还没有age属性,则添加AO属性,值为undefined
如果AO上已经有age属性,则不做任何影响
4:分析函数声明,如function foo() {},即把函数赋给AO.foo属性,如果此前foo属性已存在,则会被无情的覆盖。

var str = 'local';//分为分析过程和执行过程
//先分析声明 var str;才是str的值为undefined;
//再执行赋值操作 str = 'local';

b、然后JS代码自上而下执行;

js词法分析可以下文档:
js词法分析
燕十八JavaScript高级视频教程
初识JavaScript的解析与执行过程

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章