美文网首页
函数声明及变量提升

函数声明及变量提升

作者: lmmy123 | 来源:发表于2017-12-08 15:53 被阅读11次

变量对象(VO): 变量和执行上下文相关,那么它就应该知道数据存储在哪里以及如何访问这些数据,三种形式:

1:变量

2.函数声明

3.函数形参

所有执行中的变量都会存储在这个VO中

var  a =1;

function  fn(){console.log(a);var  a =2;}

fn()

console.log(a);

* 解析1.第一行var定义的变量a=undefined

2.fn就是函数本身vo定义如下:vo={a:undefinedfn:}* 开始执行代码1.第一行 表达式将修改 a=12.第二到五行声明函数

3.到了fn() 开始执行函数此时函数为 一作用域,只要存在作用域 就先解析所有在函数fn内部1.解析 a=undefined在fn内部 ao定义如下:ao(fn)= {a:undefined}2.执行fn内部第一行 弹出undefined第二行 把a赋值为2(这里的a是在fn中的局部变量 和外包的a全局变量不同)

4.最后一行打印全局变量a=1;说明 如果把functionfn(){console.log(a);a =2; (把var去掉 此事的a 变成了全局变量)}

var  foo =1;

function  bar(){foo =10;

return;

functionfoo(){}}

bar();

console.log(foo)

* 解析阶段(进入执行上下文)vo = {foo: undefinedbar: }* 执行代码阶段

1. 第一行foo=1;

2.第6行执行函数bar() (第二行到第5行的定义的函数)在函数bar的内部又有解析和执行阶段表示如下:vo(bar) = {foo: }执行阶段在函数bar内部的第一行foo=10(这里需要注意的是 foo是bar的局部变量 不会影响 外面全局的变量foo)

3: 最后一行console.log()foo=1;

var  foo=1;

function  bar(){foo=10;return  function foo(){ };}

bar( );

alert(foo);

最后对于这道题 为什么结果是10不是1你只要明白return function foo(){ }; 其实是一个函数表达式 不是函数定义. 原因就在这里vara =1;function fn(a){console.log(a);a =2;}fn(a)console.log(a); 这道题关键在于fn(a) 其实就是 fn(1) 在函数内部 解析阶段 a=1(这里a在函数内部 是形参 a=2也是改变fn内的局部变量 不影响全局的a )

总结

函数执行分2个阶段 (确定上下文 执行代码) 在确定上下文阶段定义vo(ao)对象值时候 的规则 规则如下argument(函数的形参) > function声明 > var声明 (也就之前提高的变量提升Hoisting)

相关文章

  • 变量提升 & this指向

    变量提升 JavaScript 中,函数及变量的声明都将被提升到函数的最顶部。JavaScript 中,变量可以在...

  • var与let、const的区别

    什么是变量提升?JavaScript 中,函数及变量的声明都将被提升到函数的最顶部。JavaScript 中,变量...

  • 函数声明及变量提升

    变量对象(VO): 变量和执行上下文相关,那么它就应该知道数据存储在哪里以及如何访问这些数据,三种形式: 1:变量...

  • 引用类型

    变量提升和函数声明提升   函数声明提升就是把函数声明提升到函数声明所在作用域中(或者说一个函数体内)的顶端,变量...

  • JavaScript 变量提升

    JavaScript 中,函数及变量的声明都将被提升到函数的最顶部。JavaScript 中,变量可以在使用后声明...

  • JavaScript 变量提升

    JavaScript 中,函数及变量的声明都将被提升到函数的最顶部。JavaScript 中,变量可以在使用后声明...

  • JavaScript(一)---变量提升及其意义

    js中函数function及变量var的声明都将被提升到函数的最顶部。但是变量的初始化不会提升。 变量提升的原因 ...

  • js原生

    三种定义函数的方式 变量声明提升 在函数体内部,声明变量,会把该声明提升到函数体的最顶端。 只提升变量声明,不赋值...

  • js的变量提升

    在JavaScript 中,函数及变量的声明都将被提升到函数的最顶部,变量可以在使用后声明,也就是变量可以先使用再...

  • 变量函数提升

    变量被提升 因为变量声明和函数声明会被解释为: 函数被提升 声明式函数会自动将声明放在前面并且执行赋值过程,而变量...

网友评论

      本文标题:函数声明及变量提升

      本文链接:https://www.haomeiwen.com/subject/oleeixtx.html