参考文献:
https://chinese.freecodecamp.org/news/javascript-var-let-and-const/
使用
传统变量方式, 已淘汰或不建议使用
作用域
可以在全局范围声明或函数/局部范围内声明。
tester是全局范围的,因为它存在于函数外部,而hello是函数范围的。 因此,我们无法在函数外部访问变量hello。
var tester = 'hey hi';
function newFunction() {
var hello = 'hello';
};
console.log(hello); // error: hello is not defined
var greeter = 'hey hi';
var greeter = 'say Hello instead';
var greeter = 'hey hi';
greeter = 'say Hello instead';
上述代码被解释成
console.log(greeter);
var greeter = 'say hello';
var greeter;
console.log(greeter); // greeter is undefined
greeter = 'say hello';
使用
推荐使用
作用域
let 是块级作用域
块是由 {} 界定的代码块,大括号中有一个块.大括号内的任何内容都包含在一个块级作用域中.
因此,在带有let的块中声明的变量仅可在该块中使用。
例如:
let greeting = 'say Hi';
let times = 4;
if (times > 3) {
let hello = 'say Hello instead';
console.log(hello); // "say Hello instead"
}
console.log(hello); // hello is not defined
let greeting = 'say Hi';
let greeting = 'say Hello instead'; // error: Identifier 'greeting' has already been declared
但是,如果在不同的作用域中定义了相同的变量,则不会有错误:
let greeting = 'say Hi';
if (true) {
let greeting = 'say Hello instead';
console.log(greeting); // "say Hello instead"
}
console.log(greeting); // "say Hi"
or
const greeting = 'say Hi';
greeting = 'say Hello instead'; // error: Assignment to constant variable.
const greeting = 'say Hi';
const greeting = 'say Hello instead'; // error: Identifier 'greeting' has already been declared
因此,每个const声明都必须在声明时进行初始化。
var x = 5;
var x = "John";
var x=true;
var y=false;
console.log(typeof 100);
function sum(a, b, c) {
return a+b+c;
}
console.log(hello instanceof Function);
const person = {
name: "zhulaoshi",
gender: "male",
job: "lecture",
getName: function () {
return this.name;
},
};
const colors = ["red", "green", "blue"];
数组与对象的区别在于键名上: 从0开始递增的正整数,是有序数据的集合
对象使用的字符串做为键名, 与顺序无关, 可以无序的数据集合
let sum = function (a, b) {
return a + b;
};
console.log(sum());
会报错,因为没有传参数
sum = function (a = 1, b = 2) {
return a + b;
};
console.log(sum(40));
不会报错,因为参数有初始值
当有许多参数时,可以用归并参数打包处理
例如计算几个数相加sum = function (a, b, c, d, e) {
return a + b + c + d + e;
};
sum = function (...arr) {
return arr.reduce((p, c) => p + c);
};
let a1 = [1, 2, 3, 4, 5];
console.log(sum(...a1));
… : 用在函数声明参数中,就是参数打包功能,rest
… : 用在函数调用的参数中, 就是扩展,spread
函数都是单值返回,如果返回多个值,返回数组或对象就可以
例如
`function getProduct() {
return [123, "手机", 6789, "HUAWEI"];
}`
function getProduct() {
return { id: 123, "my name": "手机", price: 6789, brand: "HUAWEI" };
}
let sum = function (a, b) {
return a + b;
};
改为箭头函数sum = (a, b) => {
return a + b;
};