JS学习笔记01-变量

var 、let 关键字

1.var声明的变量,会成为包含它的函数的局部变量,该变量会在函数退出时销毁。

  如果省略var关键字,则会创建一个全局变量(不建议)。

function test() {
  var message1 = "hi"; // 局部变量
  message2 = "hi";     // 全局变量
}
test();
console.log(message1); // 出错!
console.log(message2); // "hi"

2.let 声明的变量,范围是块作用域;const声明的作用域也是块。

if (true) {
  var name = 'tom';
  console.log(name); // tom
}
console.log(name);   // tom
if (true) {
  let age = 22;
  console.log(age);   // 22
}
console.log(age);     // ReferenceError: age没有定义

 

  同一个作用域也不能多次声明(var 可以多次声明,var和let也不能同时声明);const也不允许重复声明。

var name;
var name;
let age;
let age;  // SyntaxError
var home;
let home; // SyntaxError
let sex;
var sex; // SyntaxError

 

3.声明提升:var 声明的变量会提升到函数顶部,let声明的变量则不会在作用域中提升(let声明之前的执行瞬间成为“暂时性死区”)。

// name会被提升
console.log(name); // undefined
var name = 'name';
// age不会被提升
console.log(age); // ReferenceError:age没有定义
let age = 26;

 

4.全局声明:var声明的变量,会成为window对象的属性,let声明的变量则不会。

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

 

5.for循环中的声明

使用var声明的迭代变量,会渗透到循环体外部;let声明的则不会,使用let声明的迭代变量,仅限于for循环内部。

for (var i = 0; i < 5; ++i) {
  // 循环逻辑
}
console.log(i); // 5
for (let j = 0; j < 5; ++j) {
  // 循环逻辑
}
console.log(j); // ReferenceError: j没有定义

 

 

 

 

 

 

 

 

posted @ 2020-09-20 20:24  夜听雪  阅读(182)  评论(0编辑  收藏  举报