一
变量未声明,也未赋值,就输出就会出错
变量未声明,赋值,可以输出变量的值
任何变量,如果变量未经声明就赋值,此变量为全局对象所有,一切声明的全局变量,全是window的属性,就像有一个对象是提前创建好的一样。
function test()
{
a = 1
}
test()
console.log(a); //1
console.log(window.a);//1
window就是全局的域
var a = 1;//当声明一个a的时候,就会把a放在window里面
window {
a :1
}
console.log(a);-->window.a
二
预编译过程(函数中的预编译)
1.创建AO对象
2.找形参和变量声明,将变量和形参名作为AO属性名,值为undefined
3.将实参和形参统一
4.在函数体里面找函数声明,值赋给函数体
当预编译执行完成后,再执行整个函数
先来看一个例子
function fn(a)
{
console.log(a);
var a = 2;
console.log(a);
function a(){}
console.log(a);
var b = function () {}
console.log(b);
function d(){}
}
fn(1);
1.AO{
}
2.AO{
a:undefined
b:undefined
}
3.AO{
a:1
b:undefined
}
4.AO{
a: function a(){}
b:undefined
d:function d(){}
}
function fn(a)
{
console.log(a);//ƒ a(){}
var a = 2;
console.log(a);//2
function a(){}
console.log(a);//2
var b = function () {}
console.log(b);//ƒ () {}
function d(){}
}
fn(1);
全局的预编译的过程和函数中的预编译类似
如果在全局的范围中
生成一个GO对象 global object ==window