sqlcommand 执行多个储存过程是报错_JS执行流程&变量提升

JS执行流程&变量提升

59194b25b876af174ac55051ae2a3ecc.png
在这里插入图片描述

一段代码的执行

1、一段js代码在执行过程中,需要先做变量提升,为什么要做变量提升呢?因为在代码执行之前需要先编译2、在编译阶段,变量和函数会被存放在变量环境中,变量的值会被设置为undefined 3、在执行阶段,js引擎会从变量环境中查找自定义的变量和函数

因此我们知道 js的执行机制是:先编译,后执行

分析每个步骤的详细内容

一段代码

怎样的一段代码,会在执行之前就进行编译,并创建执行上下文

  • 执行全局代码时:在整个页面的生存周期内,只有一份
  • 调用一个函数时:一般情况下,函数执行网,创建的执行上下文会被销毁
  • 使用eval函数时

编译阶段 -- 变量提升

在了解变量提升之前,先说一下javascript中的声明赋值

1、变量的声明和赋值:

var nyname = 'jingda'

这段代码你可以看成两段代码组成

var myname //声明部分
myname = 'jingda' //赋值部分

2、函数的声明和赋值

function foo(){
  console.log('foo')
}

var bar = function(){
  console.log('bar')
}

第一个函数foo是一个完整的函数声明,没有涉及到赋值操作;第二个函数先声明变量bar,再把下面这部分赋值给bar

function(){
  console.log('bar')
}

然后我们可以来说一下变量提升:

所谓变量提升,指的javascript代码执行过程中,javascript引擎把变量的声明部分函数的声明部分提升到了代码开头的“行为”。

变量被提升后,会给变量设置默认值undefined

举个例子:

showName()
console.log(myname)
var myname = 'jingda'
function showName(){
  console.log('函数 showName 被执行')
}

d1de8dccf2d212e22a5f8aa53e6e387a.png我们可以看到函数showName()已经执行成功,但是console.log(myname)输出undefined此时我们的 myname 是在声明之前执行,于是它输出结果为undefined, 那如果它没有声明呢?5b62df020af6a87e70fd445602209474.png可以看到当我们把声明变量的代码注释之后,没有返回undefined,而是报错了。从上面的例子可以得到下面三个结论:

  1. 使用了未声明的变量,那么js执行会报错
  2. 在一个变量定义之前使用它,不会报错,但是该变量的值为undefined,而不是之后会定义的值
  3. 在一个函数定义之前使用它,不会出错,函数能正确执行。

第一个结论很好理解,未声明报错。那第二,三个呢?让我们看看之前说过的所谓变量提升:javascript引擎把变量的声明部分函数的声明部分提升到了代码开头的“行为”,同时会给变量设置默认值undefined

那么刚才的代码在变量提升之后就应该是这样的代码

//变量提升
var myname = undefined //变量声明
function showName(){    //函数声明
  console.log('函数 showName 被执行')
}

//可执行代码
showName()
console.log(myname)
 myname = 'jingda'

相信这样写你会更加明白可以在定义之前使用变量或者函数的原因:函数和变量在执行之前都提升到了代码的开头;

文章总结:

Javascrip的执行流程a5f61830e4bc3f9d470aabd2a9616668.png

1、编译阶段 存在变量提升:这里注意,实际上变量和函数声明在代码里的位置是不会改变的,而是在编译阶段被javascript引擎放入内存中。再拿刚才的例子 第一部分:变量提升部分的代码

var myname = undefined //变量声明
function showName(){    //函数声明
  console.log('函数 showName 被执行')
}

第二部分:执行部分的代码

showName()
console.log(myname)
 myname = 'jingda'

把javascript的执行过程细化3418bbfa7ca1fa026151930347530d29.png可以看出:输入一段代码,编译之后,会生成两部分内容:执行上下文可执行代码执行上下文是javascript执行一段代码时的运行环境

这样说明一下:执行上下文里面应该是这样的:在后面学习有关执行上下文的时候会再说明。ab4683d1c98203b66a33c48eb87a80f9.png

2、执行阶段 js引擎开始执行“可执行代码”,按照顺序一行行的执行。

‘一起学习吧’ 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值