01_vue學習之前的準備

来源:https://www.cnblogs.com/hxf175336/archive/2018/11/25/10014585.html
-Advertisement-
Play Games

一、具備的基礎知識 1.扎實的HTML/CSS/Javascript基本功,這是前置條件。 2.不要用任何的構建項目工具,只用最簡單的<script>,把教程里的例子模仿一遍,理解用法。不推薦上來就直接用 vue-cli 構建項目,尤其是如果沒有 Node/Webpack 基礎。 另外在這裡大家補充 ...


一、具備的基礎知識

1.扎實的HTML/CSS/Javascript基本功,這是前置條件。

2.不要用任何的構建項目工具,只用最簡單的<script>,把教程里的例子模仿一遍,理解用法。不推薦上來就直接用 vue-cli 構建項目,尤其是如果沒有 Node/Webpack 基礎。

另外在這裡大家補充點ES6的語法。

二、什麼是ECMAScript,以及es6的誕生?

1997年 ECMAScript 1.0 誕生

1999年12月 ECMAScript 3.0誕生,它 是一個巨大的成功,在業界得到了廣泛的支持,它奠定了JS的基本語法,被其後版本完全繼承。直到今天,我們一開始學習JS,其實就是在學3.0版的語法

2000年的ECMAScript4.0是當下ES6的前身,但由於這個版本太過激烈,對ES3做了徹底升級,所以暫時被“和諧”了

2009年12月,ECMAScript5.0版正式發佈。ECMA專家組預計ECMAScript的第五個版本會在2013年中期到2018年作為主流的開發標準。2011年6月,ES5.1版發佈,並且成為ISO國際標準

2013年,ES6草案凍結,不再添加新的功能,新的功能將被放到ES7中;2015年6月,ES6正式通過,成為國際標準

好的,介紹es6的誕生,我們簡單來學幾個es6的語法,僅僅的只是為了後面咱們vue的課程做課前準備。如果感興趣的同學可以查看

 http://es6.ruanyifeng.com/

es6語法:let和const

es6新增了let命令,用來聲明變數。它的用法類似於var,但是所聲明的變數,只在let命令所在的代碼塊內有效。

{
  let a = 10;
  var b = 1;
}

a // ReferenceError: a is not defined.
b // 1

 上面代碼在代碼塊之中,分別用letvar聲明瞭兩個變數。然後在代碼塊之外調用這兩個變數,結果let聲明的變數報錯,var聲明的變數返回了正確的值。這表明,let聲明的變數只在它所在的代碼塊有效。

for迴圈的計數器,就很合適使用let命令。

for (let i = 0; i < 10; i++) {
  // ...
}

console.log(i);
// ReferenceError: i is not defined

 

 上面代碼中,計數器i只在for迴圈體內有效,在迴圈體外引用就會報錯。

下麵的代碼如果使用var,最後輸出的是10

var a = [];
for (var i = 0; i < 10; i++) {
  a[i] = function () {
    console.log(i);
  };
}
a[6](); // 10

 

 上面代碼中,變數ivar命令聲明的,在全局範圍內都有效,所以全局只有一個變數i。每一次迴圈,變數i的值都會發生改變,而迴圈內被賦給數組a的函數內部的console.log(i),裡面的i指向的就是全局的i。也就是說,所有數組a的成員裡面的i,指向的都是同一個i,導致運行時輸出的是最後一輪的i的值,也就是 10。

如果使用let,聲明的變數僅在塊級作用域內有效,最後輸出的是 6。

var a = [];
for (let i = 0; i < 10; i++) {
  a[i] = function () {
    console.log(i);
  };
}
a[6](); // 6

 

上面代碼中,變數ilet聲明的,當前的i只在本輪迴圈有效,所以每一次迴圈的i其實都是一個新的變數,所以最後輸出的是6。你可能會問,如果每一輪迴圈的變數i都是重新聲明的,那它怎麼知道上一輪迴圈的值,從而計算出本輪迴圈的值?這是因為 JavaScript 引擎內部會記住上一輪迴圈的值,初始化本輪的變數i時,就在上一輪迴圈的基礎上進行計算。

另外,for迴圈還有一個特別之處,就是設置迴圈變數的那部分是一個父作用域,而迴圈體內部是一個單獨的子作用域。

for(let i=0;i<3;i++)
{
     let i='abc';
    console.log(i);
}

 

不存在變數提升

var命令會發生”變數提升“現象,即變數可以在聲明之前使用,值為undefined。這種現象多多少少是有些奇怪的,按照一般的邏輯,變數應該在聲明語句之後才可以使用。

為了糾正這種現象,let命令改變了語法行為,它所聲明的變數一定要在聲明後使用,否則報錯。

// var 的情況
console.log(foo); // 輸出undefined
var foo = 2;

// let 的情況
console.log(bar); // 報錯ReferenceError
let bar = 2;

上面代碼中,變數foovar命令聲明,會發生變數提升,即腳本開始運行時,變數foo已經存在了,但是沒有值,所以會輸出undefined。變數barlet命令聲明,不會發生變數提升。這表示在聲明它之前,變數bar是不存在的,這時如果用到它,就會拋出一個錯誤。

暫時性死區

只要塊級作用域記憶體在let命令,它所聲明的變數就“綁定”(binding)這個區域,不再受外部的影響。

不允許重覆聲明 

let不允許在相同作用域內,重覆聲明同一個變數

// 報錯
function func() {
  let a = 10;
  var a = 1;
}

// 報錯
function func() {
  let a = 10;
  let a = 1;
}

因此,不能在函數內部重新聲明參數。

function func(arg) {
  let arg; // 報錯
}

function func(arg) {
  {
    let arg; // 不報錯
  }
}

為什麼需要塊級作用域?

ES5 只有全局作用域和函數作用域,沒有塊級作用域,這帶來很多不合理的場景。

第一種場景,內層變數可能會覆蓋外層變數。

var tmp = new Date();

function f() {
  console.log(tmp);
  if (false) {
    var tmp = 'hello world';
  }
}

f(); // undefined

 

上面代碼的原意是,if代碼塊的外部使用外層的tmp變數,內部使用內層的tmp變數。但是,函數f執行後,輸出結果為undefined,原因在於變數提升,導致內層的tmp變數覆蓋了外層的tmp變數。

第二種場景,用來計數的迴圈變數泄露為全局變數。

var s = 'hello';

for (var i = 0; i < s.length; i++) {
  console.log(s[i]);
}

console.log(i); // 5

上面代碼中,變數i只用來控制迴圈,但是迴圈結束後,它並沒有消失,泄露成了全局變數。

 

const命令

基本語法

const聲明一個只讀的常量。一旦聲明,常量的值就不能改變。

const PI = 3.1415;
PI // 3.1415

PI = 3;
// TypeError: Assignment to constant variable.

const聲明的變數不得改變值,這意味著,const一旦聲明變數,就必須立即初始化,不能留到以後賦值。

const foo;
// SyntaxError: Missing initializer in const declaration

const的作用域與let命令相同:只在聲明所在的塊級作用域內有效。

if (true) {
  const MAX = 5;
}

MAX // Uncaught ReferenceError: MAX is not defined
const命令聲明的常量也是不提升,同樣存在暫時性死區,只能在聲明的位

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 原創作品,歡迎轉載,轉載請在文章顯眼位置註明出處:https://www.cnblogs.com/sunshine5683/p/10016569.html 開始之前先註意:在linux中切換到sqlplus,進行命令操作時候,退格鍵有可能不能用,出現^H的情況,這時候將退格鍵和Ctrl鍵一起使用,問 ...
  • @[toc] Hadoop所用安裝包和配置文件等我找到最方便使用的方式再上傳到博客,如果有需要也歡迎找我分享。 這篇博客是建立在我另一篇博客的基礎上,建議先瀏覽博文 "大數據入門第一篇:maven項目的搭建" 在windows下, 1.導包Hadoop包 我用的是破解版的文件,不需要安裝,直接解壓到 ...
  • 比如學hadoop,從哪兒開始學首先要根據你的基本情況而定,如果你就一小白,沒有任何開發基礎,也沒有學過任何開發語言,那就必須先從基礎java開始學起(大數據支持很多開發語言,但企業用的最多的還是JAVA),接下來學習數據結構、關係型資料庫、linux系統操作,夯實基礎之後,再進入大數據的學習,例如 ...
  • 問題現象:hadoop 3.1.0源碼文件ClientNamenodeProtocolProtos大小4M+,IDEA打開時載入失敗,ClientNamenodeProtocolPB報錯找不到類。 問題原因:IDEA預設載入文件大小不超過2500KB,配置項為idea.max.intellisens ...
  • 在調用glide介面時,因為最新版本為4.8.0 調用代碼如下: repositories { mavenCentral() google() } dependencies { implementation 'com.github.bumptech.glide:glide:4.8.0' annota ...
  • 1.背景 最近在做一個單頁面的管理後臺項目,為了提高開發效率,使用了Vue框架來開發。為了使各個部分的功能,獨立結構更加清晰,於是就拆分了很多組件,但是組件與組件之間數據共用成了一個問題,父子組件實現起來相對簡單,prop,$emit,$on就能搞定。除此之外,有很多兄弟組件和跨多級組件,實現起來過 ...
  • 傳統的JavaScript語言,輸出模板通常是這樣的寫的。 上面這種寫法相當繁瑣不方便,ES6 引入了模板字元串解決這個問題。 模板字元串(template string)是增強版的字元串,用反引號(`)標識。它可以當作普通字元串使用,也可以用來定義多行字元串,或者在字元串中嵌入變數 上面代碼中的模 ...
  • 前端開發“異常處理”實踐---包括try,catch,finally,throw error,new Error(),console.error在“非同步操作---$.ajax()與fetch()”過程當中的運用 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...