您的位置:首页 > Web前端 > JavaScript

JS基础知识积累

2016-09-05 15:20 465 查看
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的解析与执行过程
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息