JavaScript:從JS的執行機制到location對象

一、JS執行機制

(1)JS是單線程

JavaScript語言的一大特點就是單線程,也就是同一時間只能做一件事。因為JavaScript是為了處理頁面中的用戶交互,以及制作DOM二誕生的。比如我們對某個DOM元素進行添加和刪除操作,這個不能同時進行,應該先添加,后刪除。

這樣也會有問題:如果JS執行時間過長,會造成頁面渲染不連貫,導致頁面渲染加載阻塞的感覺

為了解決這個問題,利用多喝CPU的計算能力,HTML5提粗Web Worker標準,允許JavaScript腳本創建多個線程,于是就有了同步和異步。

(2)同步和異步

1.同步

前一個任務結束后再執行后一個任務,程序的執行與任務的排列順序是一致的、同步的。

該怎么理解呢?

就像做飯的同步做法:我們要燒水做飯,等水開了(10分鐘之后),再去切菜,炒菜,一步一步來。

2.異步

在執行這個任務的同時,也在執行別的任務。

再來拿做飯打比方:在燒水的同時,我們來切菜,炒菜。

簡單以一個案例來體驗一下JS的執行過程:

console.log(1);
setTimeout(function () {console.log(3);
}, 1000);
console.log(2);

執行結果是:

由此可以看出,現在的JS可以同時執行任務,也就是可以異步執行?

(3)同步任務

同步任務都在主線程是執行,形成一個執行棧

(4)異步任務

JS的異步任務是通過回調函數實現的

異步任務有三種類型:

  • 普通事件:如click,resize等
  • 資源加載:如load,error等
  • 定時器:包括setInterval,setTimeout等

異步任務相關回調函數添加到任務隊列中(任務隊列也稱為消息隊列)?

(5)JS執行機制

1.先執行執行棧中的同步任務

2.異步任務(回調函數)放入任務隊列中

3.一旦執行棧中的同步任務完成,按次序讀取任務隊列中的異步任務,于是被讀取的異步任務結束等待狀態,進入執行棧,開始執行?

案例:來一個練習題試試,像下面這個代碼該怎么執行呢?究竟是1 2 3還是1 3 2呢?

console.log(1);
setTimeout(function () {console.log(3);
}, 0);
console.log(2);

居然還是1 2 3,,看來這個是一個同步任務,它會形成一個執行棧

但是普通的同步任務只會產生1 2 3的序列,而setTimeout屬于異步任務的定時器類型,它會產生一個任務隊列

?按照執行機制來看,先執行執行棧中的同步任務,先執行

console.log(1);

遇見了異步任務

setTimeout(fn(), 0);

把異步任務放入任務隊列中,不執行,執行完執行棧里的同步任務后再執行,最后的輸出就是我們看見的1 2 3

那如果有多個異步任務該怎么執行呢?我們來看下面這段代碼

console.log(1);
document.onclick = function () {console.log('click');
}
console.log(2);
setTimeout(function () {console.log(3);
}, 1000);

里面的執行過程為:

其中document.onclick那個只有再鼠標點擊后才會放入任務隊列,setTimeout這個只有事件到了才會放入任務隊列,也就是圖中的console.log(3) ,執行完就會清空任務隊列

?由于主線程不斷的重復獲得任務、執行任務、在獲取任務、再執行,所以這種機制被稱為事件循環(even lop)

二、location對象

(1)location對象

window對象給我們提供了一個location屬性用于獲取或設置窗體的URL,并且可以用于解析URL。因為這個屬性返回的是一個對象,所以我們將這個屬性也稱為location對象。

?(2)URL

統一資源定位符(Uniform Resource Locator,URL)是互聯網上標準資源的地址。互聯網上的每個文件都有一個唯一的URL,它包含的信息指出文件的位置以及瀏覽器一個怎么處理它。

URL的一般語法格式為:

protocol://host[:port]/path/[?query]#fragment
http://www.itcast.cn/index.html?name=andy&age=18#link
組成說明
protocol通信協議,常用的http,ftp,maito等
host主機(域名) www.itheima.com
port端口號(可選),省略時使用方案的默認端口,如http的默認端口為80
path路徑,由領或多個'.'符號隔開的字符串,一般用來表示主機上的一個目錄或文件地址
query參數,以鍵值對的形式,通過&符號分隔開來
fragment片段,#后面內容,常見于鏈接、錨點

(3)location對象的屬性

location對象屬性返回值
location.href獲取或者設置整個URL
location.host返回主機(域名)?www.itheima.com
location.port返回端口號,如果未寫則返回空字符串
location.pathname返回路徑
location.search返回參數
location.hash返回片段

敲重點!!!href和search要重點記住

來做一個案例:5秒后跳轉頁面

手動跳轉:

<button>點擊</button>
var btn = document.querySelector('button');
btn.addEventListener('click', function () {location.href = 'http://www.itcast.cn';
})

直接輸出location.href可以得到該頁面的整個URL,賦值可以去往另一個頁面

主播主播,手動跳轉還是太累了,有沒有更強勢的跳轉方式?

有的有的,有一個自動跳轉的方法

先建立一個空的div盒子

<div></div>

然后寫JS,采用定時器實現5s后跳轉頁面

var div = document.querySelector('div');
var timer = 5;
function fn() {div.innerHTML = '您將在' + timer + '秒之后跳轉到首頁';timer--;
}
fn();
setInterval(function () {if (timer == 0) {location.href = 'http://www.itcast.cn';}else {fn();}
}, 1000)

案例:獲取URL參數數據

來練習一下數據在不同頁面中的傳遞

新建一個文件夾,將我們要建立我們這兩個頁面

然后在login.html中使用表單,來將數據傳輸到index.html里

<form action="index.html">用戶名<input type="text" name="uname"><input type="submit" value="登錄">
</form>

?在這個界面里輸入123?

在index這里我們就有了123這個信息

?也就是要用?后面的那一串信息

我們可以用location.search得到?uname=123

但是我們不需要?,則我們用substr去掉

var params=location.search.substr(1);

?然后再利用=分割鍵和值,也就是split('=')

var arr=params.split('=');

再把數據寫入div中

var div = document.querySelector('div');
div.innerHTML = arr[1] + '歡迎您';

這樣就能把數據傳到另一個頁面上啦

?(4)location對象的方法

location對象方法返回值
location.assign()跟href語言,可以跳轉頁面(也稱為重定向頁面)
location.replace()替換當前頁面,因為不記錄李四,所以不能后退界面
location.reload()程序加載頁面,相當于刷新按鈕或者f5,如果參數為true,強制刷新(Ctrl+f5)

1.location.assign()

var btn = document.querySelector('button');
btn.addEventListener('click', function () {location.assign('http://www.itcast.cn');
})

記錄瀏覽歷史,可以實現后退功能

2.location.replace()

var btn = document.querySelector('button');
btn.addEventListener('click', function () {location.replace('http://www.itcast.cn');
})

不記錄瀏覽歷史,不可以實現后退功能

3.location.reload();

location.reload();

重新加載,也就是刷新,如果參數是true,則強制刷新

(5)navigator對象

navigator對象包含有關瀏覽器的信息,有很多屬性,最常用的是userAgent,該屬性可以返回有客戶機發送服務器的user—-agent頭部的值。

下面前端代碼可以判斷用戶那個中斷打開頁面,實現跳轉

if(navigator.userAgent.match(/phone|pad|pod|iPod|ios|ipad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowserNG|WebOS|Symbian|Windows Phone)/i))) {window.location.href = "";//手機
}
else {window.location.href = "";//電腦
}

(6)history對象

window對象給我們提供了一個history對象,與瀏覽器歷史記錄進行交互。該對象包含用戶(在瀏覽器窗口中)訪問過的URL。

history對象方法作用
back()可以后退功能
forward()前進功能
go(參數)前進后退功能,如果參數是1,前進一個頁面,如果參數是-1,后退一個頁面

1.back()

模擬后退功能

var btn = document.querySelector('button');
btn.addEventListener('click', function () {history.back()
})

2.forward()

模擬前進功能

var btn = document.querySelector('button');
btn.addEventListener('click', function () {history.forward()
})

3.go()

模擬前進和后退

前進:

var btn = document.querySelector('button');
btn.addEventListener('click', function () {history.go(1)
})

后退:

var btn = document.querySelector('button');
btn.addEventListener('click', function () {history.go(-1)
})

?history對象一般在實際開發中比較少用,但是會在一下辦公系統中見到。

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/77823.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/77823.shtml
英文地址,請注明出處:http://en.pswp.cn/web/77823.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

iVX:數字化轉型全場景技術革新與生態構建實踐

在數字經濟蓬勃發展的當下&#xff0c;企業數字化轉型需求日益迫切。iVX 憑借其獨特的技術架構與創新解決方案&#xff0c;深度滲透工業互聯網、元宇宙、智慧城市等領域&#xff0c;成為推動全場景數字化轉型的重要力量。本文將重新梳理 iVX 的技術應用與生態價值&#xff0c;以…

生物化學筆記:神經生物學概論05 感受野 視覺中樞 高級視皮層中的信息走向

信息傳遞中的“擊鼓傳花” 新特性的突現 功能柱&#xff1a;簡化節點 高級視皮層中的信息走向

StarRocks Lakehouse 如何重構大數據架構?

隨著數據分析需求的不斷演進&#xff0c;企業對數據處理架構的期望也在不斷提升。在這一背景下&#xff0c;StarRocks 憑借其高性能的實時分析能力&#xff0c;正引領數據分析進入湖倉一體的新時代。 4 月 18 日&#xff0c;鏡舟科技高級技術專家單菁茹做客開源中國直播欄目《…

【SpringBoot】基于mybatisPlus的博客系統

1.實現用戶登錄 在之前的項目登錄中&#xff0c;我使用的是Session傳遞用戶信息實現校驗登錄 現在學習了Jwt令牌技術后我嘗試用Jwt來完成校驗工作 Jwt令牌 令牌一詞在網絡編程一節我就有所耳聞&#xff0c;現在又拾了起來。 這里講應用&#xff1a;令牌也就用于身份標識&a…

HCIP-security常見名詞

縮略語英文全稱解釋3DESTriple Data Encryption Standard三重數據加密標準AESAdvanced Encryption Standard高級加密標準AHAuthentication Header報文認證頭協議CACertification Authority證書頒發中心DESData Encryption Standard數據加密標準DHDiffie-Hellman密鑰交換算法DPD…

合并多個Excel文件到一個文件,并保留格式

合并多個Excel文件到一個文件&#xff0c;并保留格式 需求介紹第一步&#xff1a;創建目標文件第二步&#xff1a;創建任務列表第三步&#xff1a;合并文件第四步&#xff1a;處理合并后的文件之調用程序打開并保存一次之前生成的Excel文件第五步&#xff1a;處理合并后的文件之…

TDengine 中的壓縮設計

簡介 機器設備產生的時序數據量大&#xff0c;直接存儲成本非常高&#xff0c;所以需要使用壓縮技術&#xff0c;盡可能減小體積。 TDengine 使用了列式存儲&#xff0c;結合二級壓縮技術&#xff0c;壓縮率通常可以達到 20%&#xff0c;特殊情況下更能達到 5 % 以內&#xff…

深度學習涉及的數學與計算機知識總結

深度學習涉及的數學與計算機知識可總結為以下核心模塊&#xff0c;結合理論與實踐需求分為數學基礎和計算機技能兩大方向&#xff1a; 一、數學知識 線性代數 核心&#xff1a;矩陣運算&#xff08;乘法、轉置、逆矩陣&#xff09;、向量空間、特征值與特征向量、奇異值分解&am…

javascript<——>進階

一、作用域&#xff1a;變量可以被訪問的范圍 1.局部作用域 1.1函數作用域 在函數內部聲明的變量&#xff0c;在函數內部被訪問的&#xff0c;外部無法直接訪問。 總結&#xff1a;1、函數內部聲明的變量&#xff0c;在函數外部無法直接訪問 2、函數的參數也是函數內部的局…

驅動開發硬核特訓 · Day 25 (附加篇):從設備樹到驅動——深入理解Linux時鐘子系統的實戰鏈路

一、前言 在嵌入式Linux開發中&#xff0c;無論是CPU、外設控制器&#xff0c;還是簡單的GPIO擴展器&#xff0c;大多數硬件模塊都離不開時鐘信號的支撐。 時鐘子系統&#xff08;Clock Subsystem&#xff09;&#xff0c;作為Linux內核中基礎設施的一部分&#xff0c;為設備…

并發設計模式實戰系列(7):Thread Local Storage (TLS)

&#x1f31f; 大家好&#xff0c;我是摘星&#xff01; &#x1f31f; 今天為大家帶來的是并發設計模式實戰系列&#xff0c;第七章Thread Local Storage (TLS)&#xff0c;廢話不多說直接開始~ 目錄 一、核心原理深度拆解 1. TLS內存模型 2. 關鍵特性 二、生活化類比&a…

時序數據庫 TDengine × Perspective:你需要的可視化“加速器”

你有沒有遇到這樣的場景&#xff1a;數據已經寫進數據庫&#xff0c;圖表卻總是“慢半拍”&#xff1f;或是操作界面太卡&#xff0c;光是一個排序就能讓你等到喝完一杯咖啡&#xff1f;當數據量越來越大、響應時間卻越來越長&#xff0c;開發者和用戶都不禁要問一句——就沒有…

前端面試每日三題 - Day 19

這是我為準備前端/全棧開發工程師面試整理的第十一天每日三題練習&#xff0c;涵蓋 JavaScript中WeakMap與內存管理的底層機制、Redux Toolkit的事件以及系統設計中的企業級表單引擎構建。通過這三道題&#xff0c;你將對現代前端開發中的關鍵概念有更深入的理解&#xff0c;并…

Antd Modal Drawer 更改默認項

當項目比較大使用了非常多的 Modal 和 Drawer 要是有需求一次性全部調整就會比較麻煩&#xff0c;目前 Antd 的 ConfigProvider 暫不支持&#xff08;也有可能我沒找到&#xff0c;待大佬指證&#xff09;就比如由于默認 Modal Drawer 的遮罩層是可以點擊關閉的&#xff0c;但是…

硬件工程師面試常見問題(8)

第三十六問&#xff1a;基爾霍夫定理的內容是什么&#xff1f; 基爾霍夫電流定理&#xff1a; 1. 內容&#xff1a;電路中任意一個節點上&#xff0c;在任意時刻&#xff0c;流入節電的電流之和等于流出節點的電流之和。 2. 表達式&#xff1a;根據上圖寫出節點電流定律的數學…

Elasticsearch 內存使用指南

作者&#xff1a;來自 Elastic Valentin Crettaz 探索 Elasticsearch 的內存需求以及不同類型的內存統計信息。 Elasticsearch 擁有豐富的新功能&#xff0c;幫助你為你的使用場景構建最佳搜索解決方案。瀏覽我們的示例筆記本了解更多信息&#xff0c;開始免費云試用&#xff0…

硬件工程師面試常見問題(9)

第四十一問&#xff1a;色環電阻的顏色表示什么&#xff1f; 各環表示的意思&#xff1a; 4色環的&#xff1a;前兩位表示有效位&#xff1b;第三環表示倍乘&#xff1b;最后一環表示誤差&#xff1b; 5色環的&#xff1a;前三位表示有效位&#xff1b;第四環表示倍乘&#…

PyTorch 深度學習實戰(23):多任務強化學習(Multi-Task RL)之擴展

之前的PyTorch 深度學習實戰&#xff08;23&#xff09;&#xff1a;多任務強化學習&#xff08;Multi-Task RL)總結擴展運用代碼如下&#xff1a; import torch import torch.nn as nn import torch.optim as optim import numpy as np from torch.distributions import Norm…

前端——CSS1

一&#xff0c;概述 CSS&#xff08;Cascading Style Sheets&#xff09;&#xff08;級聯樣式表&#xff09; css是一種樣式表語言&#xff0c;為html標簽修飾定義外觀&#xff0c;分工不同 涉及&#xff1a;對網頁的文字、背景、寬、高、布局進行修飾 分為內嵌樣式表&…

賦能航天教育:高校衛星仿真教學實驗平臺解決方案

?????? 隨著全球航天事業的飛速發展&#xff0c;對高素質航天人才的需求日益增長。如何在高校階段提前鍛煉學生的航天工程實踐能力&#xff0c;成為教育界的重要命題。作為領先的通信與網絡技術供應商&#xff0c;IPLOOK基于自身在5G核心網、衛星通信及仿真平臺領域的深…