参考网址:https://www.runoob.com/js/js-variables.html
-
let 与 var 的区别:var 变量域比 let 大,let 适用于其声明的块或子块中。
var 允许重复声明变量,后声明的值覆盖之前声明的值。
let 不允许在相同作用域内,重复声明同一个变量,会报错。function varTest() { var x = 1; if (true) { var x = 2; // 同样的变量! console.log(x); // 2 } console.log(x); // 2 } function letTest() { let x = 1; if (true) { let x = 2; // 不同的变量 console.log(x); // 2 } console.log(x); // 1 } function () { var a = 1; var a = 10; console.log(a); // 10 } // 报错 function () { let a = 10; var a = 1; } // 报错 function () { let a = 10; let a = 1; } // 因此,let不能在函数内部重新声明参数。 function func(arg) { let arg; // 报错 } function func(arg) { { let arg; // 不报错 } }
-
const 用于声明常量,常量的值不能通过重新赋值来改变,并且不能重新声明。
//定义常量a并赋值为0 const a = 0; //报错(不能重新赋值) a = 1; //报错(不能重新声明) const a = 2; //输出0 console.log("a is: " + a);
-
变量与字面量
var a=1; // a 是变量,1 是字面量 var stooge = { // stooge 是一个对象 "frist-name" = "Julie", // 等号左为属性名,右侧为属性值 last_name = "beck" // 属性名如果是合法的标识符,可省略引号 }; // "frist-name", last_name, "Julie", "beck" 都是对象字面量
-
JavaScript 允许重复定义函数,但没有重载这个概念,仅依据函数名来区分函数。
后定义的同名函数覆盖之前的,与参数无关。
function test() { console.log("test"); } test(); //输出 "test arg0 + undefined" function test(arg1) { console.log("test arg" + arguments.length + " + " + arg1); } test(1,2); //输出 "test arg2 + 1"
-
变量与普通函数重名的时候,变量生效。
// 情况一,只有函数a function a() { return "function"; } console.log(a); /* 输出 function a() { return "function"; } */ console.log(a()); // 输出 "function" // 情况二,变量a与普通函数a并存 var a = 100; function a() { return "function"; } console.log(a); //输出 100 console.log(a()); /* 报错 Uncaught TypeError: a is not a function (anonymous function) @test.html:9 */
JS 中有两种函数,一种是普通函数,一种是函数对象。
函数对象用于声明一个匿名函数,然后将该函数的 init 方法赋值给该变量。// 情况三,变量a与函数对象并存 var a = 100; var a = function() { return "function"; } console.log(a); /* 输出 function() { return "function"; } */ console.log(a()); //输出 "function"