深圳便宜网站建设,wordpress关闭邮箱验证,成都广告牌制作厂家,网站开发的安全性主要考虑哪些一、var 的使用
1.1、var 的作用域
1、var可以在全局范围声明或函数/局部范围内声明。当在最外层函数的外部声明var变量时#xff0c;作用域是全局的。这意味着在最外层函数的外部用var声明的任何变量都可以在windows中使用。
2、当在函数中声明var时#xff0c;作用域是局…一、var 的使用
1.1、var 的作用域
1、var可以在全局范围声明或函数/局部范围内声明。当在最外层函数的外部声明var变量时作用域是全局的。这意味着在最外层函数的外部用var声明的任何变量都可以在windows中使用。
2、当在函数中声明var时作用域是局部的。这意味着它只能在函数内访问。
示例
var greeter hey hi;function newFunction() {var hello hello;
}这里greeter是全局范围的因为它存在于函数外部而hello是函数范围的。因此我们无法在函数外部访问变量hello。
1.2 var 变量可以重新声明和修改
这意味着我们可以在相同的作用域内执行下面的操作并且不会出错
var greeter hey hi;
var greeter say Hello instead;又比如
var greeter hey hi;
greeter say Hello instead;1.3 var 的变量提升
变量提升是 JavaScript 的一种机制:在执行代码之前变量和函数声明会移至其作用域的顶部。这意味着如果我们这样做:
console.log(greeter);
var greeter say hello;生面的代码会被解释为:
var greeter;
console.log(greeter); // greeter is undefined
greeter say hello;因此将var声明的变量会被提升到其作用域的顶部并使用 undefined 值对其进行初始化。
二、let 的使用
2.1、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我们看到在其代码块定义它的花括号之外使用hello会返回错误。这是因为let变量是块范围的.
2.2、let 可以被修改但是不能被重新声明
就像var一样用 let声明的变量可以在其范围内被修改。但与var不同的是let变量无法在其作用域内被重新声明。 来看下面的例子:
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这个事实说明:使用let,是比var更好的选择。当使用let时你不必费心思考变量的名称因为变量仅在其块级作用域内存在。
同样由于在一个块级作用域内不能多次声明一个变量因此不会发生前面讨论的var出现的问题。
2.3、let 的变量提升
就像var一样let声明也被提升到作用域顶部。
但不同的是:
1、用var声明的变量会被提升到其作用域的顶部并使用 undefined 值对其进行初始化。
2、用let声明的变量会被提升到其作用域的顶部不会对值进行初始化。
因此如果你尝试在声明前使用let变量则会收到Reference Error。
三、const 的使用
3.1、const 声明的变量在块级作用域内
像let声明一样const声明只能在声明它们的块级作用域中访问。
3.2、const 不能被修改并且不能被重新声明
这意味着用const声明的变量的值保持不变。不能修改或重新声明。因此如果我们使用const声明变量那么我们将无法做到这一点:
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声明都必须在声明时进行初始化。
当用const声明对象时这种行为却有所不同。虽然不能更新const对象但是可以更新该对象的属性。 因此如果我们声明一个const对象为
const greeting {message: say Hi,times: 4,
};同样不能像下面这样做:
const greeting {words: Hello,number: five,
}; // error: Assignment to constant variable.但我们可以这样做:
greeting.message say Hello instead;这将更新greeting.message的值而不会返回错误。
3.3、const 的变量提升
就像let一样const声明也被提升到顶部但是没有初始化。
四、var、let、const 区别总结
1、var声明是全局作用域或函数作用域而let和const是块作用域。
2、var变量可以在其范围内更新和重新声明 let变量可以被更新但不能重新声明 const变量既不能更新也不能重新声明。
3、它们都被提升到其作用域的顶端。但是虽然使用变量undefined初始化了var变量但未初始化let和const变量。
4、尽管可以在不初始化的情况下声明var和let但是在声明期间必须初始化const。