首頁 web前端 js教程 JavaScript學習筆記(三):JavaScript也有入口Main函數_javascript技巧

JavaScript學習筆記(三):JavaScript也有入口Main函數_javascript技巧

May 16, 2016 pm 03:39 PM

在C和Java中,都有一個程式的入口函數或方法,即main函數或main方法。而在JavaScript中,程式是從JS原始檔的頭部開始運作的。但某種意義上,我們還是可以虛構出一個main函數來作為程式的起點,這樣一來不僅可以跟其他語言統一了,而且說不定你會對JS有更深的理解。

1. 實際的入口

當把一個JavaScript檔案交給JS引擎執行時,JS引擎就是從上到下逐條執行每個語句的,直到執行完所有程式碼。

2. 作用域鏈、全域作用域與全域物件

我們知道,JS中的每個函數在執行時都會產生一個新的作用域。具體來說,在執行流程進入函數時會建立一個新的作用域,在函數執行完成退出時會銷毀這個作用域。函數的形參、局部變數都會綁定到這個作用域裡,當函數呼叫完成作用域銷毀時,它們隨之被銷毀。當然在特殊情況下,如果函數返回時作用域中的某些變數仍然被引用,那麼作用域以及這些被引用的變數就不會被銷毀,從而形成所謂的閉包。

另一方面,我們知道函數是可以巢狀的,因而作用域也是可以嵌套的。函數在定義的時候,JS引擎會為每個函數設定一個稱為[[scope]]內建屬性,它指向外部函數的詞法作用域。透過這種方式,多個作用域形成了鍊式結構,稱為作用域鏈。通常情況下,在任意時刻只存在一條作用域鏈,即從正在執行的函數的作用域開始,層層上溯,直到最外層的全局作用域。

[註]:作用域鏈上的函數就是JS源碼裡的層層巢狀的函數,跟函數執行時的順序或函數呼叫棧無關,這也是詞法作用域這個稱呼的由來。

全域作用域是一個特殊的作用域,它不是一個函數作用域,但它是所有函數作用域的外層作用域,也是所有作用域鏈的終點。因此只要程式沒有退出,全域作用域總是存在的,全域作用域內的變數也是一直有效的。

[函數3的作用域]-->[函數2的作用域]-->[函數3的作用域]-->[全域作用域]

另外,對應於全域作用域,還有一個全域物件。在瀏覽器中,全域物件就是window物件。全域物件是個特殊的物件:

在全域作用域中定義的變量,都會綁定到全域物件。

在任意作用域中定義的變量,如果定義時沒有用 var 關鍵字,都會綁定到全域物件。

在全域作用域中, this 指向全域物件。

從上面列舉的這些特性可以看出,如果把全域作用域當成一個物件的話,那麼實際上它就是全域物件。另外,這也解釋了在全域作用域中,以下的四個語句為什麼是等價的:

var a = 1;
a = 1;
window.a = 1;
this.a = 1;
登入後複製

3. 虛構的main函數

既然都是作用域,為什麼要有一個特殊的全域作用域呢?我們總是喜歡簡化、一致性,而盡量避免複雜、特殊。所以很自然地,我們會想能否讓全域作用域看起來跟函數作用域沒什麼兩樣?答案是肯定的。我們可以做這樣的構想:

 我們想像,在JS引擎執行原始檔時,會將檔案中的程式碼包裝到一個叫做main的函數中。然後把這個main函數當作程式的入口。
也就是說,假設一個JS檔中有這樣的程式碼:

var a = 1;
var b = 2;

function add(x, y) {
  var z = x + y;
  return z;
}
console.log(add(a, b));
登入後複製

JS引擎在程式開始執行前會把它包裝成一個main函數:

// 虚构的main函数
function main() {
  var a = 1;
  var b = 2;

  function add(x, y) {
    var z = x + y;
    return z;
  }

  console.log(add(a, b));
}
登入後複製

然後,呼叫這個main函數:

main._current_scope_ = window; // 将全局作用域(对象)设为window
main.call(window) // 将this指向window
登入後複製

4. 意義何在?

(1) JS也有了入口函數main,跟其他語言一致了。

(2) 省去了全域作用域的概念,或者說全域作用域也成了函數作用域。

(3) 透過上面對main函數的呼叫過程,可以明白全域作用域中的那些特殊性質的由來。

(4) 最後一點,將所有JS源碼當成一個函數,是為了後面講事件佇列、事件循環做鋪墊。

以上就是小編給大家介紹的JavaScript學習筆記(三):JavaScript也有入口Main函數,希望大家喜歡。

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
<🎜>掩蓋:探險33-如何獲得完美的色度催化劑
2 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1677
14
CakePHP 教程
1429
52
Laravel 教程
1333
25
PHP教程
1278
29
C# 教程
1257
24
Python vs. JavaScript:學習曲線和易用性 Python vs. JavaScript:學習曲線和易用性 Apr 16, 2025 am 12:12 AM

Python更適合初學者,學習曲線平緩,語法簡潔;JavaScript適合前端開發,學習曲線較陡,語法靈活。 1.Python語法直觀,適用於數據科學和後端開發。 2.JavaScript靈活,廣泛用於前端和服務器端編程。

JavaScript和Web:核心功能和用例 JavaScript和Web:核心功能和用例 Apr 18, 2025 am 12:19 AM

JavaScript在Web開發中的主要用途包括客戶端交互、表單驗證和異步通信。 1)通過DOM操作實現動態內容更新和用戶交互;2)在用戶提交數據前進行客戶端驗證,提高用戶體驗;3)通過AJAX技術實現與服務器的無刷新通信。

JavaScript在行動中:現實世界中的示例和項目 JavaScript在行動中:現實世界中的示例和項目 Apr 19, 2025 am 12:13 AM

JavaScript在現實世界中的應用包括前端和後端開發。 1)通過構建TODO列表應用展示前端應用,涉及DOM操作和事件處理。 2)通過Node.js和Express構建RESTfulAPI展示後端應用。

了解JavaScript引擎:實施詳細信息 了解JavaScript引擎:實施詳細信息 Apr 17, 2025 am 12:05 AM

理解JavaScript引擎內部工作原理對開發者重要,因為它能幫助編寫更高效的代碼並理解性能瓶頸和優化策略。 1)引擎的工作流程包括解析、編譯和執行三個階段;2)執行過程中,引擎會進行動態優化,如內聯緩存和隱藏類;3)最佳實踐包括避免全局變量、優化循環、使用const和let,以及避免過度使用閉包。

Python vs. JavaScript:開發環境和工具 Python vs. JavaScript:開發環境和工具 Apr 26, 2025 am 12:09 AM

Python和JavaScript在開發環境上的選擇都很重要。 1)Python的開發環境包括PyCharm、JupyterNotebook和Anaconda,適合數據科學和快速原型開發。 2)JavaScript的開發環境包括Node.js、VSCode和Webpack,適用於前端和後端開發。根據項目需求選擇合適的工具可以提高開發效率和項目成功率。

C/C在JavaScript口譯員和編譯器中的作用 C/C在JavaScript口譯員和編譯器中的作用 Apr 20, 2025 am 12:01 AM

C和C 在JavaScript引擎中扮演了至关重要的角色,主要用于实现解释器和JIT编译器。1)C 用于解析JavaScript源码并生成抽象语法树。2)C 负责生成和执行字节码。3)C 实现JIT编译器,在运行时优化和编译热点代码,显著提高JavaScript的执行效率。

Python vs. JavaScript:比較用例和應用程序 Python vs. JavaScript:比較用例和應用程序 Apr 21, 2025 am 12:01 AM

Python更適合數據科學和自動化,JavaScript更適合前端和全棧開發。 1.Python在數據科學和機器學習中表現出色,使用NumPy、Pandas等庫進行數據處理和建模。 2.Python在自動化和腳本編寫方面簡潔高效。 3.JavaScript在前端開發中不可或缺,用於構建動態網頁和單頁面應用。 4.JavaScript通過Node.js在後端開發中發揮作用,支持全棧開發。

從網站到應用程序:JavaScript的不同應用 從網站到應用程序:JavaScript的不同應用 Apr 22, 2025 am 12:02 AM

JavaScript在網站、移動應用、桌面應用和服務器端編程中均有廣泛應用。 1)在網站開發中,JavaScript與HTML、CSS一起操作DOM,實現動態效果,並支持如jQuery、React等框架。 2)通過ReactNative和Ionic,JavaScript用於開發跨平台移動應用。 3)Electron框架使JavaScript能構建桌面應用。 4)Node.js讓JavaScript在服務器端運行,支持高並發請求。

See all articles