js - 作用域和预编译

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),最后执行函数。
步骤(预编译):

  1. 创建AO
  2. 将形参和变量声明提前,并且赋值为undefined
  3. 将形参和实参的值进行统一
  4. 将函数的值赋给函数变量

列如上述代码中:
AO{a = 4, b = function, c = function ; }

在形成AO的过程就是函数的预编译

最后执行函数的代码时,会将之前留下的原来的值一 一赋值,因此,赋值之前的输出和赋值之后的输出的值也不尽相同。

!注 :函数中未用var 关键字声明的变量,进行赋值 ,属于全局变量,且,若在全局中声明了的未赋值的,在函数中赋值了,并且在函数执行后进行输出,输出的值是在函数中赋予的数值,但,同样的变量,在全局中声明,在局部作用域也声明,则,各自输出各自的数值。

最后输出的结果为:
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值