<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
【解釋】: 規定了變數能夠被存取的“範圍”,離開了這個“範圍”變數便不能被存取。
【分類】:
區域性作用域全域性作用域
【分類】:
數作用域塊作用域
【解釋】: 在函數內部宣告的變數只能在函數內部被存取,外部無法直接存取。
【範例】:
<script> // 宣告 counter 函數 function counter(x, y) { // 函數內部宣告的變數 let s = x + y; console.log(s); // 18 } // 呼叫 counter 函數 counter(10, 8); // 存取變數 s console.log(s); // 報錯 外部無法存取函數內部的變數 </script>
【總結】:
【解釋】: 在 JavaScript 中使用 {}
包裹的程式碼稱為程式碼塊,程式碼塊內部宣告的變數外部將【有可能】無法被存取。
【範例】:
<script> { // age 只能在該程式碼塊中被存取 let age = 18; console.log(age); // 正常 } // 超出了 age 的作用域 console.log(age); // 報錯 let flag = true; if(flag) { // str 只能在該程式碼塊中被存取 let str = 'hello world!'; console.log(str); // 正常 } // 超出了 age 的作用域 console.log(str); // 報錯 for(let t = 1; t <= 6; t++) { // t 只能在該程式碼塊中被存取 console.log(t); // 正常 } // 超出了 t 的作用域 console.log(t); // 報錯 </script>
【常數值】: JavaScript 中除了變數外還有常數,常數與變數本質的區別是 【常數必須要有值且不允許被重新賦值】,常數值為物件時其屬性和方法允許重新賦值。
【範例】:
<script> // 必須要有值 const version = '1.0'; // 不能重新賦值 // version = '1.1'; // 常數值為物件型別 const user = { name: '小明', age: 18 } // 不能重新賦值 user = {}; // 屬性和方法允許被修改 user.name = '小小明'; user.gender = '男'; </script>
【總結之let、var、const】:
let 宣告的變數會產生塊作用域,var 不會產生塊作用域
const宣告的常數也會產生塊作用域
不同程式碼塊之間的變數無法互相存取
推薦使用 let
或 const
開發中 let
和 const
經常不加區分的使用,如果擔心某個值會不小被修改時,則只能使用 const
宣告成常數。
關鍵字 | 塊級作用域 | 變數提升 | 初始值 | 更改值 | 通過window呼叫 |
---|---|---|---|---|---|
let | √ | × √ | - | √ | × |
const | √ | × √ | √ | × | × |
var | × | √ | - | √ | √ |
【解釋】: <script>
標籤和 js 檔案的【最外層】就是所謂的全域性作用域,在此宣告的變數在函數內部也可以被存取。
【範例】:
<script> // 此處是全域性 function sayHi() { // 此處為區域性 } // 此處為全域性 </script> <script> // 此處是全域性 function sayHi() { // 此處為區域性 } // 此處為全域性 </script>
全域性作用域中宣告的變數,任何其它作用域都可以被存取
<script> // 全域性變數 name let name = '小明'; // 函數作用域中存取全域性 function sayHi() { // 此處為區域性 console.log('你好' + name); } // 全域性變數 flag 和 x let flag = true; let x = 10; // 塊作用域中存取全域性 if(flag) { let y = 5; console.log(x + y); // x 是全域性的 } </script>
【總結】:
window
物件動態新增的屬性預設也是全域性的,不推薦!【解釋】: 函數內部允許建立新的函數,f
函數內部建立的新函數 g
,會產生新的函數作用域,由此可知作用域產生了巢狀的關係。作用域鏈本質上是底層的變數查詢機制,在函數被執行時,會優先查詢當前函數作用域中查詢變數,如果當前作用域查詢不到則會依次逐級查詢父級作用域直到全域性作用域
【範例】:
<script> // 全域性作用域 let a = 1; let b = 2; // 區域性作用域 function f() { let c; // 區域性作用域 function g() { let d = 'yo'; } } </script>
<script> // 全域性作用域 let a = 1; let b = 2; // 區域性作用域 function f() { let c; // let a = 10; console.log(a); // 1 或 10 console.log(d); // 報錯 // 區域性作用域 function g() { let d = 'yo'; // let b = 20; console.log(b); // 2 或 20 } // 呼叫 g 函數 g() } console.log(c); // 報錯 console.log(d); // 報錯 f(); </script>
【總結】:
【解釋】: 閉包是一種比較特殊和函數,使用閉包能夠存取函數作用域中的變數。
【好處】: 可以把一個變數使用範圍延伸
【範例】:
<script> function foo() { let i = 0; // 函數內部分函數 function bar() { console.log(++i); } // 將函數做為返回值 return bar; } // fn 即為閉包函數 let fn = foo(); fn(); // 1 </script>
【總結】:
【解釋】: 允許在變數宣告之前即被存取
【範例】:
<script> // 存取變數 str console.log(str + 'world!'); // 宣告變數 str var str = 'hello '; </script> let和var都有提升,但是let定義的變數沒有賦值之前是不可以使用、var可以使用是undefined
【總結】:
宣告的變數不存在變數提升,推薦使用
let`【也有人認為具有提升但是不賦值不能使用】【解釋】: 函數在宣告之前即可被呼叫
【範例】:
<script> // 呼叫函數 foo(); // 宣告函數 function foo() { console.log('宣告之前即被呼叫...'); } // 不存在提升現象 bar(); var bar = function () { console.log('函數表示式不存在提升現象...'); } </script>
【總結】:
【範例】:
<script> // 設定引數預設值 function sayHi(name="小明", age=18) { document.write(`<p>我叫${name},我今年${age}歲了。</p>`); } // 呼叫函數 sayHi(); sayHi('小紅'); sayHi('小剛', 21); </script>
【總結】:
undefined
【解釋】: arguments` 是函數內部內建的偽陣列變數,它包含了呼叫函數時傳入的所有實參。
【範例】:
<script> // 求生函數,計算所有引數的和 function sum() { // console.log(arguments); let s = 0; for(let i = 0; i < arguments.length; i++) { s += arguments[i]; } console.log(s); } // 呼叫求和函數 sum(5, 10); // 兩個引數 sum(1, 2, 4); // 兩個引數 </script>
【注意】:
【語法及範例】:
<script> function config(baseURL, ...other) { console.log(baseURL); // other 是真陣列,動態獲取實參 console.log(other); } // 呼叫函數 config('http://baidu.com', 'get', 'json'); </script>
【解釋】: 箭頭函數是一種宣告函數的簡潔語法,它與普通函數並無本質的區別,差異性更多體現在語法格式上。
【範例】:
<script> // 箭頭函數 let foo = () => { console.log('^_^ 長相奇怪的函數...'); } // 呼叫函數 foo(); // 更簡潔的語法 let form = document.querySelector('form'); form.addEventListener('click', ev => ev.preventDefault()); </script>
【總結】:
{}
,並自動做為返回值被返回arguments
,只能使用 ...
動態獲取實參本篇文章就到這裡了,希望能夠給你帶來幫助,也希望您能夠多多關注it145.com的更多內容!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45