3. JavaScript语言基础(1)

3.1 语法

  1. ECMAScript中的一切都区分大小写
  2. 标识符命名规则
  • 第一个字符必须时字母、下划线(_)或美元符号($) 
  • 剩下的其他字符可以是字母、下划线(_)、美元符号($) 或数字
  • 一般使用驼峰大小写形式

.   3. 对整个脚本启用严格模式,在脚本开头加上这一行:

"use strict"

也可以单独指定一个函数在严格模式下执行,把预处理指令放到函数体开头:

function doSomething(){
    "use strict"
    //函数体
}

    4.每条语句以分号结尾,便于开发者通过删除空行来压缩代码(如果没有结尾的分号,删除空行,则会导致语法错误)  

3.2 关键字和变量 

在javascript中有三个变量可以申明变量:var、const、let。 其中var在所有版本中可用,而const和let只能在ECMAScript6以及之后的版本中出现。

3.1.1.var 声明作用域 

    1.    局部变量,在函数内部定义一个变量,变量在函数退出来时被销毁。

function test(){
    var message="hi";//局部变量
 };
test();
console.log(message);//报错,此变量未被申明

        在函数内定义变量,省略var 操作符可以创建一个全局变量

function test(){
     message="hi";//局部变量
};
test();
console.log(message);//hi

        定义多个变量,可以在一条语句中用逗号分隔每个变量。

var meaasge="come on",
    found=true,
    age=29;

2.var声明提升

function foo(){
    console.log(age);
    var age=26;
}
foo(); //undefined

相当于:

function foo(){
    var age;
    console.log(age);
    age=26;
}
foo(); //undefined

使用var反复声明同一个变量也没有问题。

function foo(){
    var age=1;
    var age=2;
    var age=23;
    console.log(age);
}
foo(); //23

3.1.2 let 声明

let 与var 区别在于 let 声明的作用域是块作用域,而var声明的作用域是函数作用域。

//申明的 var name 没有在函数范围内,因此 if 块外面也可以使用

if (true){
    var name="matte";
    console.log(name);
}
console.log(name); //matte
//声明的 let name 在if 块内部,因此在外部不能使用name
if (true){
    let name="matte";
    console.log(name);
}
console.log(name); //没有定义age

块作用域是函数作用域的子集,因此适用于var 的作用域限制同样也使用于let.

使用let 声明变量时,在同一个块作用域中不能同时申明一个变量。但是在嵌套中使用相同的标识符不会报错。

let age;
let age;//报错
var name="nike";
console.log(name); //nike
if(true){
    var name="matte";
    console.log(name);//matte
}


let age=30;
console.log(age);//30
if(true){
    var age=26;
    console.log(age);//26
}

对声明冗余报错,不会因混用let 和var 而影响。

var name;
let name;//报错

let age;
var age;//报错

暂时性死区:let和var的另外一个重要区别在于let声明的变量不会在作用域中被提升。

console.log(name);
let name="jiayou";//报错

全局声明:使用let 在全局作用域中声明的变量不会成为window对象属性。

var name="matte";
console.log(window.name);

let age=26;
console.log(window.age);//undefined

for循环中的let声明

for(var i=0;i<5;i++){
    //循环逻辑
}
console.log(i);//5
for(let i=0;i<5;i++){
    //循环逻辑
}
console.log(i);//报错 因为let是块作用域
for(var i=0;i<5;i++){
    setTimeout(()=>console.log(i),0);
}
//输出结果是 5,5,5,5,5,之所以这样,是因为在退出循环时,迭代变量保存的是导致循环退出的值,在之后执行超时逻辑时,所有i都时同一个变量,因而输出的都是同一个值。

for(let i=0;i<5;i++){
    setTimeout(()=>console.log(i),0);
}
//输出结果是 0,1,2,3,4,JavaScript引擎在后台会为每个迭代循环声明一个新的迭代变量,每个setTimeout引用的都是不同的变量实例。

3.1.3 const声明

 const与let 一个重要的区别是它声明变量时必须同时初始化变量,且尝试修改const声明的变量会导致运行时错误。如果const变量引用的是一个对象,南无修改这个对象内部对的属性并不违反const的限制。

总结

  • var和let 的区别:var声明的作用域是函数作用域,而let 声明的作用域是块作用域​​​​​。let声明的变量不会在作用域中被提升。使用let 在全局作用域中声明的变量不会成为window对象属性。let 不能重复声明一个标识符。
  • let 与const的区别:const声明变量时必须同时初始化变量,且尝试修改const声明的变量会导致运行时错误。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值