js全局域-window
一切声明的全局变量,都是作用在window的域中,js中最大的作用域就是window
首先在全局声明变量或者函数时,先将函数或者变量的声明提前,赋值将留在原地
var d ;
console.log(d);//undefined
function eg(a,b){
console.log(c);//function
console.log(a);//function
console.log(b);//function
function a(){};
a = 322;
console.log(a);//322
d = 1000000
var c = 434;
function c(){}
console.log(c);//434
var b ;
console.log(b);//function
function b(){};
b = 3;
console.log(b)//3
}
eg(4)
var a = 100;
console.log(d)//100
如上述的代码:作用在全局变的变量有(GO–Global Object)
GO{ b:0, eg:function , a:100}
在形成GO的过程就是预编译的过程
因此在未对b赋值的情况下,输出的b 是 undefined,所以,输出变量的值是要在输出之前对变量进行赋值;而调用函数,由于作用域会提前将函数声明,所以在声明之前声明之后度可以调用函数。
js函数局部域-function
在函数执行之前,同样的要将函数内声明了的变量提前但是自身的赋值依然留在原地,且赋值为undefined,再者函数中要考虑形参的赋值,对形参和实参进行统一,其次找到声明的函数,再对其函数体变量进行赋值,完成这一系列的活动—Activation Object(AO),最后执行函数。
步骤(预编译):
- 创建AO
- 将形参和变量声明提前,并且赋值为undefined
- 将形参和实参的值进行统一
- 将函数的值赋给函数变量
列如上述代码中:
AO{a = 4, b = function, c = function ; }
在形成AO的过程就是函数的预编译
最后执行函数的代码时,会将之前留下的原来的值一 一赋值,因此,赋值之前的输出和赋值之后的输出的值也不尽相同。
!注 :函数中未用var 关键字声明的变量,进行赋值 ,属于全局变量,且,若在全局中声明了的未赋值的,在函数中赋值了,并且在函数执行后进行输出,输出的值是在函数中赋予的数值,但,同样的变量,在全局中声明,在局部作用域也声明,则,各自输出各自的数值。
最后输出的结果为: