js中使用,申明变量/函数,与不申明的区别是什么?

 一.代码分类
   全局代码:该代码在整个文档中都能访问的到
   函数代码:又称为局部代码,只能在当前对象中能访问的到。

二,函数申明与变量申明

function a(){

}
//使用function申明函数

var a;
//使用var关键字申明变量,值为undefined


 三.当要执行全局代码时(全局上下文执行)
   步骤1:在执行全局代码前将window确定为全局上下文

console.log(a === window.a)//true 使用var申明了变量在代码执行前就会把变量a添加为window的属性

console.log(a)//undefined ,因为变量a被添加为window的方法了,代码是在window后执行

var a = 1;//使用了var关键字申明了变量,并且赋值。


   步骤2:对全局代码进行预处理(执行代码之前浏览器的准备工作)
     将var申明的全局变量,添加为window的属性,但是没有赋值。
     将function申明的全局函数赋值,并添加为window的方法,已经赋值。
     将this方法赋值为window

var a;//申明变量
function b(){}//申明函数

console.log(a)//undefined
console.log(a === window.a)//true
//将var申明的全局变量,添加为window的属性,但是没有赋值(值为undefined)。

console.log( (b()) === (window.b()) )//true
//将function申明的全局函数赋值,并添加为window的方法,已经赋值。

console.log(this === window)//true
//将this方法赋值为window    


   步骤3:执行全局代码代码

 四.当调用函数时 函数执行上下文(执行局部代码)
   步骤1:在调用函数,准备执行函数体之前,创建对应函数执行上下文代码块,这个代码块作用和全局上下文的window对象一样,当函数调用的时候就会开启,然后函数调用完之后就会释放掉。(这是一个虚拟的,为了方便理解自定义的)


  步骤2:这个对象对局部数据进行预处理(在全局上下文的基础上多了arguments,和实参)
     将实参赋值给形参,然后将该形参添加为该函数的属性,实参赋值给该属性的值
     将arguments(伪数组,是每个函数都有的属性,里面存着的实参)该属性添加为当前函数的属性
     将var申明的全局变量,添加为window的属性,但是没有赋值。
     将function申明的全局函数赋值,并添加为window的方法,已经赋值。
     将this方法赋值为window


  步骤3:开始执行函数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值