JavaScript 學習筆記1

第一章    JavaScript簡介javascript

JavaScript實現組成部分:ECMAscript,BOM,DOMjava

注:c++

1.ECMAScript是宿主環境中腳本語言的國際 Web 標準 ,規範定義了一種腳本語言實現應該包含的內容。瀏覽器

Web瀏覽器只是ECMA實現可能的宿主環境之一。async

JavaScript做爲一種嵌入HTML文檔的、基於對象的腳本設計語言,是ECMA的一種實現。函數

2.DOM:文檔對象模型的縮寫,是一種與瀏覽器、平臺、語言的接口,使得咱們能夠訪問頁面其餘的標準組件。網站

3.BOM:由以一系列相關的對象組成,提供了獨立於內容而與瀏覽器窗口進行交互的對象。描述了與瀏覽器進行交互的方法和接口,能夠對瀏覽器窗口進行訪問和操做,譬如能夠彈出新的窗口,改變狀態欄中的文本,對Cookie的支持。this

一些網站會在您的計算機上的以小文本文件存儲信息。這種文件稱爲 Cookiespa

第二章 設計

2.1script元素

type屬性:一直使用的都是text/javascript

使用<script>元素的方式:直接在頁面中嵌入JavaScript代碼和包含外部Javascript文件

(注:第一種需指定script的type屬性;第二種還需制定src屬性,值爲指向外部JavaScript文件的連接)

2.2script位置

通常把所有JavaScript引用放在<body>元素中頁面內容的後面。

 

2.3

defer屬性:延遲腳本,在執行腳本時不會影響頁面的構造

async:當即下載腳本

變量提高問題hoisting

Javascript的做用域

C家族的語言有塊做用域,當程序控制走進一個塊,好比if塊,只做用於該塊的變量能夠被聲明,而不會影響塊外面的做用域。

javascript是函數做用域。這是和c家族語言最大的不一樣。該程序裏面的if並不會建立新的做用域。即變量定義的做用域並非離其最近的封閉語句或代碼塊,而是包含它們的函數。

eg:

c++:

#include <stdio.h>
int main() {
    int x = 1;
    printf("%d, ", x); // 1
    if (1) {
        int x = 2;
        printf("%d, ", x); // 2
    }
    printf("%d\n", x); // 1
}

js:

var x = 1;
console.log(x); // 1
if (true) {
    var x = 2;
    console.log(x); // 2
}
console.log(x); // 2

1.變量提高是什麼

函數聲明和變量聲明老是會被解釋器悄悄地被「提高」到方法體的最頂部。

請注意,變量賦值並無被提高,只是聲明被提高了。

eg:

function foo() {
    bar();
    var x = 1;
}

 

函數聲明:只有函數式的聲明纔會連同函數體一塊兒被提高。

function test() {
    foo(); // TypeError "foo is not a function"
    bar(); // "this will run!"
    var foo = function () { // 變量指向函數表達式
        alert("this won't run!");
    }
    function bar() { // 函數聲明 函數名爲bar
        alert("this will run!");
    }
}
test();  //兩種函數聲明方式,僅有foo被提高

2.變量提高會形成的問題

變量聲明提高也可能致使變量重聲明的混淆。在同一函數中屢次聲明相同變量是合法的。這在寫多個循環時會常常出現。

3.變量提高如何解決

相關文章
相關標籤/搜索