JS 相關概念

標識符

所謂標識符是指變量、函數、屬性的名字,或者函數的參數。標識符的書寫有幾個特征

1.區分大小寫: var a=1;
2.第一個字符必須是字母、下劃線(_)、或者是$ :var _aa =3; var$$cd=100
3.后面的可以是字母、數字、下劃線、$

命名規約

1.使用是實際意義的單詞
2.變量使用駝峰規則,第一個單詞首字母小寫,后面單詞首字母大寫
3.變量使用名詞,方法函數使用動詞開頭,常量全部用大寫字母,函數創建對象首字母大寫  
        var firstName;
        var isSmall;
        var hasClass;
        var PI;
        var MAX_COUNT;
        function getName(){}
        function Person(){}

變量

在JavaScript中變量是用來保存值的占位符,定義變量的時候要使用var運算符,
后面跟一個作為名稱的標識符即可

var message;

弱類型

在一些編譯語言(C、Java、C#)等變量的類型是固定的,在聲明變量的時候就要標識其類型,
在程序執行前編譯階段變量的類型就確定了,而且不能改變,我們稱之為強類型

int a = 2;
string b = "hello";

一些常見的解釋型語言(PHP、JavaScript)等變量的類型是松散的,一個變量可以用來保存任何類型的數據,
變量的類型不是由聲明時決定(聲明的時候只是用了var運算符),而是在程序執行階段由其值的類型決定,
隨著程序運行其值類型改變,變量類型也會發生改變

var message = 1; //message 類型就是數字
message = "hello world!"; //message 類型變為字符串

語句

語句(statement)是為了完成某種任務而進行的操作,比如下面就是一行賦值語句

var a = 1 + 2;

這條語句先用var運算符,聲明了變量a,然后將 1+2 的運算結果賦值給變量a。

JavaScript中語句以;結束,一行可以包含多條語句,如果省略分號不會產生語法錯誤,
解釋器會自動判斷語句結束

var sum = 1 + 2
var diff = 3 - 4;

變量提升

JavaScript引擎的工作方式是,先解析代碼,獲取所有被聲明的變量,然后再一行一行地運行。
這造成的結果,就是所有的變量的聲明語句,都會被提升到代碼的頭部,這就叫做變量提升

我們寫了一個賦值語句

var a = 2;

實際上執行過程是解釋器在未執行的時候先解析出變量聲明,然后給他初始值undefined,
然后才逐句執行程序

var a;
a = 2;

::::全局變量

申明前置:
var a=100;
b=10;
console.log(a)
console.log(c)

var c =4
var d =200

注釋

并不是所有的語句都會執行,我們可以通過注釋功能讓js引擎忽略部分語句,
這個功能經常用來解釋我們的部分語句,和讀書做標注一樣

Javascript提供兩種注釋:一種是單行注釋,用//起頭;另一種是多行注釋,放在/* 和 */之間。

    //為變量賦值
    var a = 1; //賦值成功

    /*
        下面定義個函數
        至于什么是函數
        且聽下回分解
    */

    function getName(id){
        return 'Byron';
    }

(HTML的注釋 <!--  -->  CSS的注釋:/* */)

關鍵字和保留字

關鍵字是JavaScript引擎會用到的一些字,我們標識符不能再使用,比如定義變量的關鍵字var,關鍵字有

break   else    new var
case    finally return  void
catch   for switch  while
continue    function    this    with
default if  throw   
delete  in  try 
do  instanceof  typeof  
保留字

除了這些不能用作標識符的關鍵字,js還規定了一些不能用作標識符的保留字,
這些字符沒有什么意義,但是未來會用到

abstract    enum    int short
boolean export  interface   static
bye extends long    super
char    final   native  synchronized
class   float   package throws
const   goto    private transient
debugger    implements  protected   volatile
doubler import  public  
實際上一些保留字在新的ECMAscript已經得到使用

認識 JavaScript

網頁?
網頁 = Html+CSS+JavaScript

Html: 網頁元素內容

CSS: 控制網頁樣式

JavaScript:操作網頁內容,實現功能或者效果

javascript

javascript !== java
是客戶端腳本語言(指瀏覽器)
ECMAScript, DOM, BOM, NodeJS(變量,函數,語句,操作瀏覽器頁面上的內容,交互)

引入方式
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8">
    <title>標題</title>
    <link href="index.css" rel="stylesheet">
    <style>
        body{
            background: red;
        }
    </style>
    </head>
    <body>
        <p>
        </p>
        
        
        <script src="index.js"></script>
        <script>
            alert(1);
        </script>
    </body>
    </html>

瀏覽器渲染機制

解析 HTML 標簽, 構建 DOM 樹
解析 CSS 標簽, 構建 CSSOM 樹
把 DOM 和 CSSOM 組合成 渲染樹 (render tree)
在渲染樹的基礎上進行布局, 計算每個節點的幾何結構
把每個節點繪制到屏幕上 (painting)
 render-tree-construction

白屏問題

如果把樣式放在底部,對于IE瀏覽器,在某些場景下(新窗口打開,刷新等)頁面會出現白屏,而不是內容逐步展現

如果使用 @import 標簽,即使 CSS 放入 link, 并且放在頭部,也可能出現白屏(一般情況下不用@import)
chrome是等html,css都出現后的渲染的一個結果
css一般放在body的前面,放到head里面

FOUC (Flash of Unstyled Content) 無樣式內容閃爍

如果把樣式放在底部,對于IE瀏覽器,在某些場景下(點擊鏈接,輸入URL,使用書簽進入等),
會出現 FOUC 現象(逐步加載無樣式的內容,等CSS加載后頁面突然展現樣式).對于 Firefox 
會一直表現出 FOUC .
將JS放在底部
腳本會阻塞后面內容的呈現
腳本會阻塞其后組件的下載
對于圖片和CSS, 在加載時會并發加載(如一個域名下同時加載兩個文件). 但在加載 JavaScript 時,
會禁用并發,并且阻止其他內容的下載. 所以把 JavaScript 放入頁面頂部也會導致 白屏 現象.
加載異步
    <script src="script.js"></script>
沒有 defer 或 async,瀏覽器會立即加載并執行指定的腳本,“立即”指的是在渲染該 script 
標簽之下的文檔元素之前,也就是說不等待后續載入的文檔元素,讀到就加載并執行。

    <script async src="script.js"></script>
有 async,加載和渲染后續文檔元素的過程將和 script.js 的加載與執行并行進行(異步)。

    <script defer src="script.js"></script>
有 defer,加載后續文檔元素的過程將和 script.js 的加載并行進行(異步),
但 script.js 的執行要在所有元素解析完成之后,DOMContentLoaded 事件觸發之前完成。

defer:腳本延遲到文檔解析和顯示后執行,有順序
async:不保證順序

基本調試

alert
console.log
打斷點
二分法(分成兩份,注釋點一份,再查找)
(報錯是什么,報錯的點在哪里,分析問題,解決問題的能力)

參考
高性能網站建設指南, Steve Sounders
Render-tree construction, layout, and paint
How browsers work(http://taligarsiel.com/Projects/howbrowserswork1.htm

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,578評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,701評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,691評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,974評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,694評論 6 413
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,026評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,015評論 3 450
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,193評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,719評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,442評論 3 360
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,668評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,151評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,846評論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,255評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,592評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,394評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,635評論 2 380

推薦閱讀更多精彩內容

  • 1.JS基本概念 標識符 所謂標識符是指變量、函數、屬性的名字,或者函數的參數。 標識符的書寫有幾個特征:1.區分...
    饑人谷_小侯閱讀 349評論 0 0
  • 標識符 所謂標識符是指變量、函數、屬性的名字,或者函數的參數。標識符的書寫有幾個特征: 區分大小寫 第一個字符必須...
    yuhuan121閱讀 833評論 0 1
  • 標識符 identifier 所謂標識符是指變量、函數、屬性的名字,或者函數的參數。標識符的書寫有幾個特征區分大小...
    _空空閱讀 448評論 0 0
  • FreeCodeCamp - Basic JavaScript 寫在前面: 我曾經在進谷前刷過這一套題,不過當時只...
    付林恒閱讀 16,484評論 5 28
  • 年輕時值得做的二十七件事情: 旅行 學會烹飪 保持經濟獨立 面對你最恐懼的事情之一 獨自生活 完成一個目標 找到你...
    痞boss閱讀 255評論 0 1