在昨天内容中可以知道,JavaScript 采用了静态作用域
,函式在定义时就已经确定作用域,而在产生作用域後,会产生 执行环境
,并依照 执行堆叠
的方式依序执行程序码,那什麽是 执行环境
与 执行堆叠
呢?说明如下:
执行环境
是指程序在执行时所产生的环境
window
或 global
) - 开启浏览器会产生 window 变数
,而开启後端 Node.js 则会产生 global 变数
this
,此时的 this
指向 window
或 global
,要注意的是 this
的值会随着 执行环境
而改变在函式运行时会产生函式的执行环境,以及产生函式内的变数,反之,若还没呼叫函式是不会有函式的执行环境,也不会产生函式内的变数。
执行环境
是一层一层建立并堆叠执行,最上层是正在执行的环境,当运作完成後则会一层一层离开,这就是所谓的 执行堆叠
,而 执行堆叠
与什麽时候定义函式没有关系,它与呼叫的位置有关。
在还未呼叫 函式 fn2
前,没有函式 fn1
与 函式 fn2
的执行环境。
function fn1(people) {
var sayHello = '早安';
return `${people} ${sayHello}!`;
}
function fn2() {
var people = '妈妈';
console.log('1:', fn1(people));
// 1: 妈妈 早安!
}
fn2();
利用 for 回圈重复呼叫函式,会不断产生新的执行环境
function fn1(num) {
console.log(`第 ${num} 名!`);
}
function fn2() {
fn1(1);
// 第 1 名!
for(var i=2; i<4; i++) {
fn1(i);
}
// 第 2 名!
// 第 3 名!
}
fn2();
图片待补
<<: Day 19. Hashicorp Vault: Audit log (2)
这不是第一次 我是阿姜,今年三月开始在五倍红宝石 Astro Camp 学习程序相关技能,期间接触了...
昨天我们完成简易订单系统後,今天要来练习一个新的挑战-串接API! 这次我们透过中央气象局开放资料平...
用html2canvas转成canvas,再下载 载入js,js会把div里的东西,转换成canva...
前言 这篇演讲提到了一些互相学习的想法,当你遇到团队在学习上面的成效不彰的时候,或许可以考虑听这演...
阵列的特性 还记得阵列怎麽赋值吗,Day15 - 基础(4):阵列处理、JSON 我们先来复习一下...