昨天有提到函式的作用域是限制在 function
内,
所以当我们宣告一个变数在 function
内时,
那该变数的作用域会限制在 function
中,
当我们执行函式时,会产生一个执行环境,
如果没有执行函式时,就不会产生执行环境,
当我们不断调用函式,就会不断产生新的执行环境,
而这个执行环境会限制该函式的作用域,以及有自己的 this
,
全域也有自己的全域执行环境,
当网页或後端的 Node.js 只要一开启,
就会建立好全域执行环境,
在建立全域执行环境时会自动生成 window
或 global
,
如果使用浏览器的话会产生 window
,Node.js 则会产生 global
,
而全域执行环境也会产生 this
函式执行环境
this
全域执行环境
window
或 global
this
,此时 this
会等於 window
和 global
在 JavaScript 中,执行环境一层一层向上堆叠而成,
而最底层一定是全域执行环境,
而这些堆叠的执行环境,称为执行堆叠。
这样讲也许听不懂,直接看范例比较清楚
范例:
function sayHi() {
return 'Hi weiwei'
}
function doSomething() {
console.log(sayHi());
}
doSomething();
执行堆叠的部分可以使用 Chrome 浏览器的开发人员工具来查看
执行上述步骤後,程序码会先停留在 doSomething()
的位置,
但 doSomething()
还没被执行,
而在执行推叠的部分看到函式执行之前就已经存在全域执行环境 (anonymous)
进下一步之後,
在全域执行环境中呼叫 doSomething()
的函式时,
可以看到 doSomething
执行环境叠在全域执行环境上面,
而现在的执行环境是 doSomething
再下一步之後,
在 doSomething()
函式中呼叫 sayHi()
这个函式,
sayHi
的执行环境叠在 doSomething
的上面,
而当前的执行环境为 sayHi
当 sayHi
执行完毕後,会直接离开 sayHi
执行环境,
而 doSomething
执行完後,也会离开 doSomething
的执行环境,
最後就会回到全域执行环境 (anonymous)
上述步骤以图形表示的话
以上就是今天的内容,明天说明范围链的部分。
前情提要 昨天我们成功将模型部署到 Google AI Platform 上,并且也处理了授权的问题...
上一篇我实作了第一个爬虫,之後我又有练习了类似的方式爬其他的网站,结果出现了一些小问题。当时我程序码...
我们在 Day21 提到 data-remote=true、Day25 提到了一些与Ajax 相关的...
-面向服务的架构 (SOA) 面向服务的架构 (SOA) 可以通过 Web 服务或微服务来实现。W...
透过官方帐号进行推播会因为人数越来越多而增加发送成本,因此 Line Notify是一个官方提供帐号...