提升hoisting

##变量提升 一个变量只属于一个作用域, 通过var声明的变量会发生变量提升。

function(){foo = 1;var foo;console.log(foo); // output:1
}
复制代码

注意只有变量声明被提升了,赋值语句没有。

function(){foo = 1;var foo = 2;
}
等价于
function(){var foo;foo = 1;foo = 2;
}
下例中因为有变量提升所以foo不是gobal。
function(){console.log(foo);foo = 1;console.log(foo);var foo = 2;console.log(foo);
}// output: undefined 1 2
复制代码

另一个例子解释了为什么通过 var fnSomeFunction = function(){};不会发生函数提升。

console.log(fnSomeFunction);//output: undefined'
fnSomeFunction(); // output: error fnSomeFunction is not a function
var fnSomeFunction = function(){console.log("i am here");
}
//fnSomeFunction 终究是变量,所以提升到最顶。至使在赋值语句之前无法调用函数。
复制代码

函数提升

通过常规函数声明可发生函数提升,且包括定义部分。

foo();//output: i am here
function foo(){
console.log('i am here');
}
复制代码

需要特别提醒,函数提升早于变量提升,但是var不会覆盖同名函数。

console.log(typeof foo); //output: function
var foo = 1;
console.log(typeof foo); //output:number
function foo(){
console.log('i am here');
}//等价于
function foo(){
console.log('i am here');
var foo
console.log(typeof foo); //output: function
foo = 1;
console.log(typeof foo); //output:number}
复制代码

转载于:https://juejin.im/post/5aa531a251882555677e2e1b

提升hoisting相关推荐

  1. 063_提升Hoisting

    1. 提升(Hoisting)是JavaScript将声明移至顶部的默认行为. 2. var声明变量会被提升 2.1. 使用var声明的变量会被提升. 2.2. 实例 a = 5; // 把5赋值给a ...

  2. 一篇文章看懂变量提升(hoisting)

    文章转自:一篇文章看懂变量提升(hoisting) - 知乎 前沿 大家对变量提升(hoisting)一定不陌生了,这篇文章希望可以建立一个系统的规则,以后碰到变量提升,可以重新看这篇文章,根据文中的 ...

  3. javascript变量声明提升(hoisting)

    http://openwares.net/js/javascript_declaration_hoisting.html 可能要FQ一下 javascript的变量声明具有hoisting机制,Jav ...

  4. js变量提升hoisting

    作用域(Scoping) 什么是作用域? 我对作用域的理解是只会对某个范围产生作用,而不会对外产生影响的封闭空间.在这样的一些空间里,外部不能访问内部变量,但内部可以访问外部变量. c语言的变量分为全 ...

  5. JS基礎:Hoisting 變量提升、TDZ 暫時性死區(Temporal Dead Zone)

    JS 基礎:Hoisting 變量提升.TDZ 暫時性死區(Temporal Dead Zone) 文章目錄 JS 基礎:Hoisting 變量提升.TDZ 暫時性死區(Temporal Dead Z ...

  6. JavaScript变量提升(Hoisting)详解

    文章出自个人博客https://knightyun.github.io/2019/09/02/js-hoisting,转载请申明. 概念 变量提升是 JavaScript 的一种执行机制,大致就是字面 ...

  7. TypeScript(ES6)变量提升(Hoisting)

    ES6 新特性 ES2015(ES6) 新增加了两个重要的 JavaScript 关键字: let 和 const. let 声明的变量只在 let 所在的代码块内有效. const 声明一个只读的常 ...

  8. JS提升(hoisting)详解

    近期在学习js,了解到js的一个名词,就是hoisting,进而了解了下js的解析机制 详情可参考:http://www.runoob.com/js/js-hoisting.html js的解析过程分 ...

  9. js变量提升_学习笔记:JS中的作用域和预解析

    知识总结:谢静贤.汤昊 在javascript中作用域是非常重要的,本文将会说明作用域以及我们在工作,以及面试中的一些面试题,如果有不足的地方希望大家可以评论指出来,自己一定会及时的改正错误,避免大家 ...

最新文章

  1. 被Facebook终止合作,被谷歌下架,股价营收皆腰斩,猎豹只剩AI一根救命稻草了...
  2. 20. 有效的括号 golang 堆栈
  3. sass使用相关报错
  4. CCNA初学者应该知道的词
  5. 新海诚动画背景简单娱乐分析
  6. 教你3招解决PDF文字无法复制的所有问题!!!
  7. MoveIt! 学习笔记13 - KDL/IKFAST/TRAC-IK运动学求解器区别
  8. SAP库存盘点必要知识
  9. 过来,带你了解什么是物联网?
  10. 网络流24题(部分)
  11. PAT乙级真题全集-PAT (Basic Level) Practise (中文)
  12. 饮冰三年-人工智能-Python-17Python基础之模块与包
  13. 氤氲夜风中,楚楚温存
  14. matlab调用python自定义函数模块进行数据分析总结
  15. 基于Altium Designer进行可变电阻元件封装
  16. 第一性原理态密度计算的基本原理和应用场景
  17. IE能够打开网页 可是chrome和火狐打不开网页解决的方法
  18. GetCredentialCount  80004005
  19. 01 Wireshark软件安装和基本操作
  20. 研究方法的类型有哪些?(实例与技巧)

热门文章

  1. NanoPi M1 Plus OpenWRT挂载NFS rootfs
  2. 机器人制作__整体装配
  3. 关系抽取—OneRel
  4. python安装sqlite_SQLite 安装
  5. Springboot+ElasticSearch 项目实战(三)
  6. Ownable Contracts
  7. 如何解决问题恢复现状?
  8. 【完美解决 】 -VsCode设置了字体,但是中文字体仍然是宋体 的解决方法
  9. 冲杀职场必备的10只魔戒(这文章有点长 呵)
  10. dotnet 为大型应用接入 ApplicationStartupManager 启动流程框架