《前端の待业笔记☞JavaScript》——语言基础(1)
本篇内容
🔔语法
🍺关键字与保留字
🚗变量
🌳数据类型
🌱操作符
🎃语句
🔨函数
正文
🔔语法
了解过ECMAScript历史的👨🎓都应该知道其语法很大程度上借鉴了C语言和其他类C语言,如java.熟悉这类语言的👨🎓,很容易理解ECMAScript的语法。
1.区分大小写
一句话总结:在ECMAScript中一切(变量、函数名和操作符)都区分大小写
2.标识符
变量、函数、属性或函数参数的名称称之为标识符,标识符可以由一个或多个下列字符组成:
◾️第一个字符必须是一个字母、下划线( _ )或美元符号($)
◾️剩下的其他字符可以是字母、下划线、美元符号或数字
(推荐)采用驼峰命名形式:如myFunction、arraySort
3.注释
// 这是单行注释
/*
这是
多行注释
...
*/
4.语句
ECMAScript的语句以分号结尾。如果省略分号意味着由解析器确定在哪里结束。如:
let add = b + c //没有分号亦有效,不推荐
let diff = b - c ; // 推荐
tip:随手加;是个好习惯。
🍺关键字与保留字
ES6所有关键字如下;break do in typeof case else instanceof var catch export new void class etends return while const finally super with continue for switch yield debugger function this default if throw delete import try
ES6保留字如下;enum implements package public interface protected static let private await
🚗变量
ECMAScript有3个关键字声明变量:var 、const、let
const和let是ES6新增
var关键字
var num; // √
var num = 100; // √
var age=23,
tiemer = false,
name = "ihon"; //定义多个变量 √
var声明作用域
使用var定义的变量会成为包含他的函数的局部变量,如:
function test (){
var text ="A graduate looking for a job" //局部变量
}
test();
console.log(text) //error
var声明提升
使用var时,下面的代码不会报错,这是因为var声明的变量会自动提升到函数作用域顶部;
function test2(){
console.log(num)
var num = 1
}
test2() // undefined
//等价于
function test2(){
var num;
console.log(num)
num = 1
}
test2() //undefined
所谓提升(hoist)就是把所有变量声明都拉到函数作用域的顶部,同时反复多次使用var声明同一变量(并不推荐);
function test2 (){
var num =1;
var num =2;
var num =3;
console.log(num)
}
test2()//3
let声明
let和var的作用差不多,但有着非常重要的区别。最明显的区别是。let是块级作用域,而var声明的范围是函数作用域。
if(true){
var name = "Fu"
console.log(name) //Fu
}
console.log(name) // Fu
if(true){
let name = "Fu"
console.log(name) //Fu
}
console.log(name) // ReferenceError:name 没有定义
tip:“{”和“}”包裹的是块级作用域
let不允许同一个块作用域出现冗余声明,这样会报错:
let num ;
let num;//SyntaxError:num已经声明过了
1.暂时性死区
let和var的另一个区别在于let声明的变量不会在作用域中被提升。
在解析代码时,JavaScript引擎也会注意到块后面的let声明,在此之前不能以任何方式来引用未声明的变量。let声明之前的执行瞬间称为“暂时性死区”,在此阶段引用任何后面才声明的变量都会抛出ReferenceError.
2.全局声明
var在全局作用域中声明的变量会成为window对象的属性,let不会。
不过,let声明仍然在全局作用域中发生的,相应变量会在页面的生命周期内存续,所以为了避免SyntaxError,必须确保页面不会重复声明同一变量。
3.for循环中的let声明
在let出现之前,for循环定义的迭代变量会渗透到循环体外部:
for(var i=0;i<4;++i){
//循环体
}
console.log(i); //4
//改成let之后,这个问题就消失了
for(let i =0;i<4;++i){
//循环体
}
console.log(i);//ReferenceError:i没有定义
经典问题:
for(var i=0;i<5;++i){
setTimeout(()=> console.log(i),0)
}
//我们可能认为会输出0,1,2,3,4
//实际上会输出5,5,5,5,5
for(let i =0;i<5;++i){
setTimeout(()=>console.log(i),0)
}
//0,1,2,3,4
const声明
const的行为与let基本相同,唯一一个重要的区别是用它声明变量时必须同时初始化变量,且修改声明的变量会导致运行错误。
const声明的限制只适用于他指向的变量的引用。如果const变量引用的是一个对象,修改这个对象内部并不违反const的限制。
const city ={};
city.erea = 8000; // √
◾️const不允许重复声明
◾️const声明的作用域也是块
◾️const不能用来声明迭代变量
未完待续... 如有错误欢迎评论区指正!!!