美文网首页
JS 变量提升与函数提升示例解析

JS 变量提升与函数提升示例解析

作者: 斜晖丶 | 来源:发表于2019-05-14 16:59 被阅读0次

例:

(function() {
  var x = foo();
  var foo = function foo() {
    return 'foobar';
  };
  return x;
})();

运行结果:

Uncaught TypeError: foo is not a function
  at <anonymous>:2:11
  at <anonymous>:7:3

可以看到运行结果直接报错了,让我们来解析一下为什么报错。错误信息:foo is not a function,那么这边foo是什么呢?这边可以直接打印出来:

undefined

可以知道foo = undefined,所以var x = foo();这边报了上述的错(foo is not a function)。那么这边的foo为什么是undefined,这边就涉及到了JS的变量提升概念(参考《let深入理解---let存在变量提升吗?》)。var 的「创建」和「初始化」都提升了,「赋值」没有得到提升,所以foo = undefined。

如果把 foo 改为函数声明式:

(function() {
  var x = foo();
  function foo() {
    return 'foobar';
  };
  return x;
})();

得到结果:

"foobar"

这边因为function 的「创建」「初始化」和「赋值」都被提升了,foo的函数体提升了所以var x = foo();可以正常执行。

相关文章

  • JS 变量提升与函数提升示例解析

    例: 运行结果: 可以看到运行结果直接报错了,让我们来解析一下为什么报错。错误信息:foo is not a fu...

  • 变量提升和函数声明提升

    JS引擎的工作方式:先解析代码,获取所有变量的声明。 变量提升 等价于 所以 等加于: 函数声明提升 当函数通过函...

  • JavaScript中函数声明提升

    运行结果:(chrome 54.0+、IE11) js中变量声明和函数声明会在解析的时候提升【参考MDN变量提升】...

  • JavaScript 函数声明与函数表达式的区别

    函数声明 存在函数提升(同比于变量提升) 函数声明在JS解析时进行函数提升,因此在同一个作用域内,不管函数声明在哪...

  • JS中的提升

    JS中包含两种提升,变量提升和函数提升。 变量提升 变量提升只能是var或者function声明的变量或者函数,l...

  • Javascript 变量执行过程 和 数组 & 对象的区别

    变量提升 JS执行过程1. 先提升(先提升函数,再提升变量,如果名字一样,变量提升会覆盖函数提升)2. 再执行,如...

  • js变量声明提升与函数表达式

    1.变量声明提升 js引擎会把变量声明与函数声明都提升到当前函数的顶部。eg: js引擎编译为 2.函数表达式 对...

  • 猫眼

    var变量提升,函数声明提升,消除变量声明提升(let); 高阶函数,函数式的编程,柯里化 原型链继承,js面向对...

  • js变量提升与函数提升

    从别人给我的一道题目说起,请问执行下面语句后的输出结果 我最初的答案是: 其实应该是 这道题包含了了函数提升与变量...

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

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

网友评论

      本文标题:JS 变量提升与函数提升示例解析

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