JavaScript Weird Part (3) - 全域環境與全域物件

Javascript 程式永遠都是在執行環境中運作,也就是透過解譯器 - 一個已經寫好的程式 - 驗證和執行你的程式碼。執行環境將正在執行的程式碼包裹在其中管理。

所以 JavaScript 的程式碼開始被運作的最初基礎,是執行環境的建立和執行。和其他被執行的程式碼不同,基礎執行環境是全域執行環境。全域是指可以在任何地方取用他。

即便一個 Javascript 檔案裡還沒有寫入任何程式碼、空的,但只要一旦載入,語法解析器開始運作,雖然發現並無任何東西可以解析,但是因為已經開始執行 Javascript,就創造一個全域執行環境。全域執行環境創造兩件事情:

  1. 全域物件(globe object):物件只是名稱值的組合
  2. this 變數

在上圖裡,在還沒有建立任何程式碼時,Javascript 已建立執行環境,它決定 this 裡是什麼,現在變數 this 指的就是「現在這個運行 Javascript 的瀏覽器視窗」

執行 Javascript 時,永遠都會有一個全域物件,在瀏覽器裡就是指 window。如果開啟另一個分頁,就會有另一個全域物件,一個視窗會有一個全域物件。每個視窗有自己的執行環境和自己的全域物件。

綜合以上,執行環境是在全域等級創造的。其中創造的全域物件是可以被視窗內的任何程式、任何 JavaScript 檔案、詞彙環境取用的。在全域等級裡面,this 指的就是正在執行的視窗

this 參照到 window 物件:

全域指的就是不在 Javascript 的函數裡。程式碼或變數不在函數裡,就是全域的。
1
2
3
var a = "hello world";

function b() {}

全域環境已經建立。並創造變數 a及附屬的值,它不在函數裡,所以它是全域變數;全部的程式碼也不在函數裡,它們都是全域的。在 Javascript 裡,創造變數或函式,就會和全域物件連結。

Powered by Hexo and Hexo-theme-hiker

Copyright © 2013 - 2020 CYC'S BLOG All Rights Reserved.

UV : | PV :