[JS]看看在各scope(execution context)的hoisting情况

本文探讨了JavaScript中的Hoisting现象,即变量与函数声明会被提升到作用域顶部的特性。通过全局环境与函数内部的例子,解释了变量与函数声明在不同上下文中如何被提升,并展示了这种特性如何影响代码执行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

探究Global环境与function内的hoisting现象

概念:
Hoisting是JavaScript的特性,会先把function以及变数给​​存入记忆体当中

今天在global的环境(Global execution context)下,如果以function来看,可以把宣告放在function invoke下面,因为有hoisting,可以呼叫成功

b();//hoisting function

function b(){
  console.log("call b");
}

如果以变数来看的话,因为有hoisting所以会印出undefined而不是not define

console.log(myVar);//變數的hoisting,會印出undefined
var myVar = "hihihi";

延伸:
如之前所提到的,function呼叫都会产生一个execution context,所以我们这边可以推测也会产生hoisting

以function来看:

function a(){
  inner();//inner在function a裏頭也會hoisting
  function inner(){
    console.log("inner hihihi");
  }
}

会印出inner hihihi,所以也是会有hoisting的。

若以变数来看呢?

function a(){
  console.log(newVar); //newVar在function a裏頭也會hoisting,不會取得外部的newVar
  var newVar;
}

var newVar = "Hello I'm global"
a();

结果在a()中console.log会印出undefined。故不会取得外部的newVar,所以function里头也做了hoisting…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值