
批改狀態(tài):合格
老師批語:
變量是存儲值的容器。要聲明一個變量,先輸入關鍵字 let 或 var,然后輸入合適的名稱
由于var聲明的變量 再次聲明依然可以賦予新的值,存在bug 所以不常用
下面使用let:let name ;
,let sex ;
,let age ;
標識符必須以字母、下劃線(_)或者美元符號($)開頭;后續(xù)的字符也可以是數(shù)字(0-9)。因為 JavaScript 語言是區(qū)分大小寫的,所以字母可以是從“A”到“Z”的大寫字母和從“a”到“z”的小寫字母。
const 創(chuàng)建一個只讀的常量。常量標識符的命名規(guī)則和變量相同.常量命名通常用全大寫的方式 如:const PI = 3.14;
,const MY_NAME = ['張三'];
常量不可以通過重新賦值改變其值,也不可以在代碼運行時重新聲明。它必須被初始化為某個值。
常量的作用域規(guī)則與 let 塊級作用域變量相同。若省略const關鍵字,則該標識符將被視為變量。
圖中常量不賦值 會顯示錯誤:Uncaught SyntaxError: missing = in const declaration. : const聲明中缺少=
圖中常量重新賦值 會顯示錯誤 TypeError: invalid assignment to const。 :對const賦值無效
變量定義后可以進行賦值:yourName = '李四';
也可以將定義、賦值操作寫在同一行:let yourName = '李四';
變量在賦值后是可以更改的:
let yourName = '李四';
console.log(yourName);
yourName = '趙五';
console.log(yourName);
可以直接通過變量名取得變量的值:yourName;
數(shù)據(jù)類型 | 說明 |
---|---|
布爾值(Boolean) | 有2個值分別是:true 和 false |
null | 一個表明 null 值的特殊關鍵字。 JavaScript 是大小寫敏感的,因此 null 與 Null、NULL或變體完全不同 |
undefined | 和 null 一樣是一個特殊的關鍵字,undefined 表示變量未賦值時的屬性 |
數(shù)字(Number) | 整數(shù)或浮點數(shù),例如: 42 或者 3.14159 |
字符串(String) | 字符串是一串表示文本值的字符序列,例如:”Howdy” |
代表(Symbol) | ( 在 ECMAScript 6 中新添加的類型).。一種實例是唯一且不可改變的數(shù)據(jù)類型。 |
運算符 | 說明 |
---|---|
+ |
將兩個數(shù)字相加,或拼接兩個字符串。 |
-, *, / |
這些運算符操作與基礎算術一致。只是乘法寫作星號,除法寫作斜杠。 |
= |
為變量賦值 |
=== |
測試兩個值是否相等,并返回一個 true/false (布爾)值。 |
!== |
和等于運算符相反,測試兩個值是否不相等,并返回一個 true/false (布爾)值。 |
! |
返回邏輯相反的值,比如當前值為真,則返回 false。原式為真,但經(jīng)取非后值為 false |
語法:函數(shù) 方法名(參數(shù)){}function way() {}
語法:方法名(參數(shù));way(2, 3);
語法:函數(shù)(){} 方法名不寫
如果此函數(shù)為一次性的 聲明后立即使用:
(function(a, b) {
console.log(a + b);
})(5,6);
如果這個匿名函數(shù)不是一次性的,應該使用函數(shù)表達式
let add = function (a, b) {
console.log(a + b);
};
add(5, 5);
胖箭頭:
add = (a, b) => a + b; //等同于let add = function (a, b)
// 如果函數(shù)的代碼只有一行。大括號可以不寫
console.log(add(11, 9));
// 如果參數(shù)只有一個,參數(shù)的括號可以不寫
add = (a) => a + 5;
console.log(add(99));
// 如果沒有參數(shù)時,括號必須寫
add = () => 10 + 3;
console.log(add());
// 箭頭函數(shù)
// 如果執(zhí)行語句只有一條 可以不寫大括號:{}
// 如果參數(shù)只有一個,可以不寫超參數(shù)外面的括號
// 如果沒有參數(shù),括號必須寫
函數(shù)的參數(shù)分為形參和實參
(1)形參:在聲明一個函數(shù)的時候,為了函數(shù)的功能更加靈活,有些值是固定不了的,對于這些固定不了的值。我們可以給函數(shù)設置參數(shù)。這個參數(shù)沒有具體的值,僅僅起到一個占位置的作用,我們通常稱之為形式參數(shù),也叫形參。
(2)實參:如果函數(shù)在聲明時,設置了形參,那么在函數(shù)調用的時候就需要傳入對應的參數(shù),我們把傳入的參數(shù)叫做實際參數(shù),也叫實參。
function 函數(shù)名(形參1,形參2...){
函數(shù)體
}
function 函數(shù)名(實參1,實參2....){
形參1=實參1;
形參2=實參2;
形參3=實參3;
}
作用域就是一個獨立的環(huán)境,讓變量不會外泄、暴露出去。作用域最大的用處就是隔離變量,不同作用域下同名變量不會有沖突。
函數(shù)可以訪問內部的變量
function way() {
let a = 4;
return a * a;
}
console.log(way());
也可以訪問函數(shù)外部定義的變量:
let b = 4;
function way() {
let a = 4;
return b * 4;
}
console.log(way());
1.自由變量
如下代碼中,console.log(a)要得到 a 變量,但是在當前的作用域中沒有定義 a(可對比一下 b)。當前作用域沒有定義的變量,這成為 自由變量 。自由變量的值向父級作用域尋找
<script>
let a = 100;
function fn() {
let b = 200;
console.log(a); // 這里的a在這里就是一個自由變量
console.log(b);
}
fn();
</script>
2.作用域鏈
如果父級也沒有,就一層一層向上尋找,直到找到全局作用域還是沒找到,就宣布放棄。這種一層一層的關系,就是 作用域鏈 。
<script>
let a = 100;
function F1() {
let b = 200;
function F2() {
let c = 300;
console.log(a); // 自由變量,順作用域鏈向父作用域找
console.log(b); // 自由變量,順作用域鏈向父作用域找
console.log(c); // 本作用域的變量
}
F2();
}
F1();
</script>
閉包的實現(xiàn)原理和作用
1、閉包的概念:指有權訪問另一個函數(shù)作用域中的變量的函數(shù),一般情況就是在一個函數(shù)中包含另一個函數(shù)。
2、閉包的作用:訪問函數(shù)內部變量、保持函數(shù)在環(huán)境中一直存在,不會被垃圾回收機制處理
<script>
function b() {
//外層函數(shù)聲明的變量
let num = 1;
function f() {
console.log(num);
}
return f();
}
// 實際上b()函數(shù)并沒有因為執(zhí)行完就被垃圾回收機制處理掉
// 這就是閉包的作業(yè)。調用b()函數(shù),就會執(zhí)行里面的f函數(shù)
// f函數(shù)這時就會訪問到外層的變量
let ba = b;
ba();
</script>
因此我們可以在函數(shù)內部再創(chuàng)建一個函數(shù),這樣對內部的函數(shù)來說,外層函數(shù)的變量都是可見的,然后我們就可以訪問到他的變量了。
3、閉包的優(yōu)點:
方便調用上下文中聲明的局部變量邏輯緊密,可以在一個函數(shù)中再創(chuàng)建個函數(shù),避免了傳參的問題
4、閉包的缺點:
因為使用閉包,可以使函數(shù)在執(zhí)行完后不被銷毀,保留在內存中,如果大量使用閉包就會造成內存泄露,內存消耗很大
基本用法
let string = `Hello'\n'world`;
console.log(string);
// "Hello'
// 'world"
普通字符串
`aaaaa`
//返回字符串"aaaaa"
引號使用,返回字符串
let a=123;
`aaa${a}aaa`
//返回字符串"aaa123aaa"
帶標簽的模板字符串,可以自定義函數(shù)處理模板字符串
function Tag(strings, personExp,ageExp,...)
//strings:字符串數(shù)組,這個其實就是以${}分分隔符分割得到的數(shù)組
//personExp:模板字符串中第一個${}的值
//ageExp:模板字符串中第二個${}的值
//...:模板字符串中第n個${}的值
let browserType = 'mozilla';
browserType.length;
(1)獲得字符串的長度
let radData = 'My NaMe Is MuD';
radData.toLowerCase();
radData.toUpperCase();
(2)轉換大小寫
Copyright 2014-2025 http://ipnx.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號