内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

JavaScript的作用域是什么-創(chuàng)新互聯(lián)

今天就跟大家聊聊有關(guān)JavaScript的作用域是什么,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

目前創(chuàng)新互聯(lián)已為1000+的企業(yè)提供了網(wǎng)站建設、域名、網(wǎng)頁空間、網(wǎng)站運營、企業(yè)網(wǎng)站設計、安慶網(wǎng)站維護等服務,公司將堅持客戶導向、應用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。

JavaScript 的作用域包括:模塊作用域,函數(shù)作用域,塊作用域,詞法作用域和全局作用域。

全局作用域

在任何函數(shù)、塊或模塊范圍之外定義的變量具有全局作用域??梢栽诔绦虻娜我馕恢迷L問全局變量。
當啟用模塊系統(tǒng)時,創(chuàng)建全局變量會變得困難,但仍然可以做到這一點??梢栽?HTML 中定義一個變量,這個變量需要在函數(shù)之外聲明,這樣就可以創(chuàng)建一個全局變量:

<script>
let GLOBAL_DATA = { value : 1};
</script>
console.log(GLOBAL_DATA);

當沒有模塊系統(tǒng)時,創(chuàng)建全局變量會容易很多。在任何文件中的函數(shù)外聲明的變量都是全局變量。
全局變量貫穿于程序的整個生命周期。

另一種創(chuàng)建全局變量的方法是在程序的任意位置使用 window 全局對象:

window.GLOBAL_DATA = { value: 1 };

這樣 GLOBAL_DATA 變量會隨處可見。

console.log(GLOBAL_DATA)

不過你也知道這種做法是不好的。

模塊作用域

如果不啟用模塊,在所有函數(shù)之外聲明的變量是全局變量。在模塊中,在函數(shù)外部聲明的變量都是隱藏的,除非顯式導出,否則不可用于其他模塊。

導出使函數(shù)或?qū)ο罂捎糜谄渌K。在這個例子中,我從模塊文件 sequence.js 中導出了一個函數(shù):

// in sequence.js
export { sequence, toList, take };

當前模塊可以通過導入來使用其他模塊的函數(shù)或?qū)ο蟪伞?/p>

import { sequence, toList, toList } from "./sequence";

在某種程度上,我們可以認為模塊是一個自動執(zhí)行的函數(shù),它將 import 的數(shù)據(jù)作為輸入,然后返回 export 的數(shù)據(jù)。

函數(shù)作用域

函數(shù)作用域意味著在函數(shù)中定義的參數(shù)和變量在函數(shù)內(nèi)的任何位置都可見,但是在函數(shù)外部不可見。

下面是一個自動執(zhí)行的函數(shù),被稱為IIFE。

(function autoexecute() {
let x = 1;
})();
console.log(x);
//Uncaught ReferenceError: x is not defined

IIFE 的意思是立即調(diào)用函數(shù)表達式,是一個在定義后立即運行的函數(shù)。

用 var 聲明的變量只有函數(shù)作用域。更重要的是,用 var 聲明的變量被提升到其作用域的頂部。通過這種方式,可以在聲明之前訪問它們。看看下面的代碼:

function doSomething(){
console.log(x);
var x = 1;
}
doSomething(); //undefined

這種事不會發(fā)生在 let 中。用 let 聲明的變量只能在定義后訪問。

function doSomething(){
console.log(x);
let x = 1;
}
doSomething();
//Uncaught ReferenceError: x is not defined

用 var聲明的變量可以在同一作用域下多次重新聲明:

function doSomething(){
var x = 1
var x = 2;
console.log(x);
}
doSomething();

用 let 或 const 聲明的變量不能在同一作用域內(nèi)重新聲明:

function doSomething(){
let x = 1
let x = 2;
}
//Uncaught SyntaxError: Identifier 'x' has already been declared

也許我們可以不必關(guān)心這一點,因為 var 已經(jīng)開始變得過時了。

塊作用域

塊作用域用花括號定義。它由 { 和 } 分隔。

用 let 和 const 聲明的變量可以受到塊作用域的約束,只能在定義它們的塊中訪問。

思考下面這段關(guān)于 let 塊范圍的代碼:

let x = 1;
{ 
let x = 2;
}
console.log(x); //1

相反,var 聲明不受塊作用域的約束:

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

另一個常見問題是在循環(huán)中使用類似 setTimeout() 的異步操作。下面的循環(huán)代碼將顯示五次數(shù)字 5。

(function run(){
for(var i=0; i<5; i++){
setTimeout(function logValue(){
console.log(i); //5
}, 100);
}
})();

帶有 let 聲明的 for 循環(huán)語句在每次循環(huán)都會創(chuàng)建一個新的變量并設置到塊作用域。下一段循環(huán)代碼將會顯示 0 1 2 3 4 5。

(function run(){
for(let i=0; i<5; i++){
setTimeout(function log(){
console.log(i); //0 1 2 3 4
}, 100);
}
})();

詞法作用域

詞法作用域是內(nèi)部函數(shù)訪問定義它的外部作用域的能力。

看一下這段代碼:

(function autorun(){
let x = 1;
function log(){
console.log(x);
};
function run(fn){
let x = 100;
fn();
}
run(log);//1
})();

log 函數(shù)是一個閉包。它從父函數(shù) autorun() 引用 x 變量,而不是 run() 函數(shù)中的 x 變量。

閉包函數(shù)可以訪問創(chuàng)建它的作用域,而不是它自己的作用域。

autorun() 的局部函數(shù)作用域是 log() 函數(shù)的詞法作用域。

作用域鏈

每個作用域都有一個指向父作用域的鏈接。當使用變量時,JavaScript 會向下查看作用域鏈,直到它找到所請求的變量或者到達全局作用域(即作用域鏈的末尾)。

看下面這個例子:

let x0 = 0;
(function autorun1(){
let x1 = 1;
(function autorun2(){
let x2 = 2;
(function autorun3(){
let x3 = 3;
console.log(x0 + " " + x1 + " " + x2 + " " + x3);//0 1 2 3
})();
})();
})();

內(nèi)部函數(shù) autorun3() 可以訪問本地 x3 變量。還可以從外部函數(shù)訪問變量 x1 和 x2 和全局變量 x0 。

如果找不到變量,它將在嚴格模式下返回錯誤。

"use strict";
x = 1;
console.log(x)
//Uncaught ReferenceError: x is not defined

非嚴格模式也被稱為“草率模式”,它會草率的創(chuàng)建一個全局變量。

x = 1;
console.log(x); //1

看完上述內(nèi)容,你們對JavaScript的作用域是什么有進一步的了解嗎?如果還想了解更多知識或者相關(guān)內(nèi)容,請關(guān)注創(chuàng)新互聯(lián)成都網(wǎng)站設計公司行業(yè)資訊頻道,感謝大家的支持。

另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。

分享標題:JavaScript的作用域是什么-創(chuàng)新互聯(lián)
網(wǎng)站網(wǎng)址:http://www.rwnh.cn/article44/csseee.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營銷、服務器托管移動網(wǎng)站建設、搜索引擎優(yōu)化、網(wǎng)站制作企業(yè)建站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設
柘荣县| 海淀区| 甘洛县| 保康县| 福泉市| 碌曲县| 大港区| 资兴市| 循化| 东阿县| 邓州市| 固镇县| 琼海市| 阿尔山市| 陵川县| 周口市| 梁山县| 霞浦县| 临朐县| 乌拉特中旗| 海盐县| 永丰县| 寿光市| 垫江县| 枣阳市| 利津县| 体育| 天镇县| 宁晋县| 邹城市| 白河县| 浦北县| 策勒县| 石首市| 枣庄市| 越西县| 葵青区| 西乌| 湟中县| 香格里拉县| 东至县|