JS Hoisting

function
Example 1 - 没有用 var 来declare variable. Hoisting will happen.
Example 2 - 有用 var 来declare variable

Example 1

t2.js

  • 注意: 以下的 a 变量 没有 用 var 来declare。
function foo(x){if (x > 5){a = 'positive' }else{a = 'negative'}console.log("inside foo=",a);
}
foo(100)
console.log("outside foo=",a)

-output

inakamono@ninja MINGW64 ~/wk/coding/es6-the-right-parts/ex0
$ node t2.js
inside foo= positive
outside foo= positive
(base)

t2.js 的 a 变量会被 hoisted 提升至 global context 如下

var a// 《------a 被 hoisted 提升至 global contextfunction foo(x){if (x > 5){a = 'positive'}else{a = 'negative'}console.log("inside foo=",a);
}
foo(100)
console.log("outside foo=",a) ;

Example 2

function foo(x){if (x > 5){var a = 'positive'}else{var a = 'negative'}console.log("inside foo=",a);
}
foo(100)
console.log("outside foo=",a) ;
  • output
    解释:在 foo function 内declare 的var a 的scope 没有被hoisted 至 global context. var a 的scope 只有被限制在 foo function 内。 所以 run 了foo(100) 之后, a 就不能被 called 了。
inakamono@ninja MINGW64 ~/wk/coding/es6-the-right-parts/ex0
$ node t2.js
inside foo= positive
C:\Users\inakamono\wk\coding\es6-the-right-parts\ex0\t2.js:10
console.log("outside foo=",a) ;^ReferenceError: a is not definedat Object.<anonymous> (C:\Users\inakamono\wk\coding\es6-the-right-parts\ex0\t2.js:10:28)at Module._compile (internal/modules/cjs/loader.js:956:30)at Object.Module._extensions..js (internal/modules/cjs/loader.js:973:10)at Module.load (internal/modules/cjs/loader.js:812:32)at Function.Module._load (internal/modules/cjs/loader.js:724:14)at Function.Module.runMain (internal/modules/cjs/loader.js:1025:10)at internal/main/run_main_module.js:17:11

JS variable hoisting相关推荐

  1. 用__postback传递JavaScript变量到c#(pass a js variable to C# by a __postback )

    之前发过用POST方式的http://www.cnblogs.com/blodfox777/articles/1271912.html 而用__postback比较高阶,代码出自NC01 privat ...

  2. JavaScript 中的 hoisting 到底是甚麼 ?

    JavaScript 中的 hoisting 到底是甚麼 ? 前言 正文 到底什麼是 hoisting? let const 與 hoisting 為什麼要有 hoisting? hoisting 到 ...

  3. js变量作用域和变量提升

    在javascript中, 理解变量的作用域以及变量提升是非常有必要的.这个看起来是否很简单,但其实并不是你想的那样,还要一些重要的细节你需要理解. 变量作用域 "一个变量的作用域表示这个变 ...

  4. JavaScript最全编码规范

    转载: JavaScript最全编码规范 类型 ●基本类型:访问基本类型时,应该直接操作类型值 ●string ●number ●boolean ●null ●undefined var foo = ...

  5. java犯的小错误_[Java教程]十个JavaScript中易犯的小错误,你中了几枪?

    [Java教程]十个JavaScript中易犯的小错误,你中了几枪? 0 2015-06-01 12:00:19 序言 在今天,JavaScript已经成为了网页编辑的核心.尤其是过去的几年,互联网见 ...

  6. javascript_如何不再害怕JavaScript

    javascript 成为一名出色的Javascript开发人员要知道的事情 (Things to know to be a great Javascript developer) Have you ...

  7. ES6中修复的5个JavaScript“不良”部分

    by rajaraodv 通过rajaraodv ES6中修复的5个JavaScript"不良"部分 (5 JavaScript "Bad" Parts Tha ...

  8. 分享 10 个最常见的 JavaScript 问题

    来源 | https://www.toptal.com/javascript/10-most-common-javascript-mistakes 如今,JavaScript几乎是所有现代web应用程 ...

  9. 前端逻辑练习题+学习记录 不定期更新

    编程题 1.返回数组中最大的数字(reduce函数) largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1 ...

最新文章

  1. Tomcat高级部分-使用特定模块和软件反向代理请求到后端tomcat实现负载均衡和session保持...
  2. spring mvc 与Struts的认识
  3. Jquery中表单序列化提交到后台是怎样进行URL解码查看参数
  4. java web开发学习手册_Java 人必备学习手册开发下载!
  5. 【CSS3】CSS3背景相关属性大全
  6. 华为鸿蒙重磅更新,华为重磅官宣!鸿蒙系统升级机型遭曝光:多达55款产品支持升级...
  7. 21_多易教育之《yiee数据运营系统》用户画像-模型标签流失预测篇兼退拒风险概率预测篇
  8. 中控考勤机无线连接不上服务器,中控考勤机连接不上电脑的解决方法
  9. 普中51单片机开发板笔记
  10. SAP MM 发货到成本中心场景下的批次确定
  11. 转载:【Gradle教程】Gradle 基础入门
  12. 计算机中英汉字段如何切换,电脑上中英文切换按哪个键
  13. 如何修改Safari浏览器网页字体大小?
  14. php 静态变量 引用,PHP的返回引用(方法名前加)和局部静态变量(static)
  15. 阿里品牌数据银行:最全数据银行介绍
  16. idea 查看源码 /* compiled code*/
  17. 计算机网络发展的第四阶段特点,计算机网络基础考试重点.doc
  18. windows的由来与详细介绍
  19. setLenient(true/false)
  20. 使用JS模拟键盘、鼠标操作

热门文章

  1. C++类的多继承和虚基类
  2. java异常处理,throw和throws的区别
  3. 【原创】简单的局域网内无线文件传输(1)
  4. 基于django+elasticsearch的全文检索
  5. 1077 四位数数字加密
  6. 高阶函数——让代码更简单,内含实例
  7. 第一启富金:本周聚焦美联储利率,后续是否继续加息成关健
  8. jquery实现数字滚动效果
  9. 客制化BIOS相关设置
  10. latex使用marvosym 宏包来替换logo图标