变量就是对底层数据的引用,并不是数据本身;比如:一个人叫张三,张三只是他的名字,并不是他这个人本身。
java script中的变量分为三种:let(块级变量)、var(函数级变量)、const(常量,块级引用不可变)
let作用于块级,var作用于函数级
let声明的变量作用于块级,如下代码,能够正常输出
将代码改成
就会报错说name is not defined
var是函数级变量,作用于整个函数
将之前这段代码改成如下
可以正常输出,说明var
声明的变量作用于整个函数
var声明的变量会提升到函数顶部,而let声明的变量不会提升
如下代码
在程序内部就相当于这样,所以在上面用var
声明的变量可以正常输出
而let
声明的变量不会这样提升
const的作用域和let一样都是作用域块级,也不存在变量提升,但是const声明的相当于常量,它声明后引用是不可变的。
比如先声明name
为abc,然后改成def
这样就会报错Assignment to constant variable.
,这里改变了引用。
如下例子
可以正常输出,这里只是改变了值,并没有改变引用。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在JavaScript中,变量是存储数据值的占位符,它们允许你引用底层数据而不是直接操作数据本身。根据声明方式的不同,变量的行为和作用域有所差异。主要分为三种类型:let
、var
和 const
。
作用域:let
声明的变量具有块级作用域,这意味着变量只在其声明的代码块(如大括号内)内有效。
示例:
function exampleLet() {
{
let name = "猿分享";
console.log(name); // 正常输出 "猿分享"
}
console.log(name); // 报错 ReferenceError: name is not defined
}
exampleLet();
变量提升:与var
不同,let
声明的变量不会发生变量提升现象,即在声明前访问会报错。
作用域:var
声明的变量具有函数作用域或全局作用域。在函数内部声明时,它对整个函数可见;在函数外部声明,则为全局变量。
示例:
function exampleVar() {
{
var name = "猿分享";
}
console.log(name); // 正常输出 "猿分享",因为var变量提升至函数作用域顶部
}
exampleVar();
变量提升:var
声明的变量会被提升到其所在作用域的顶部,但赋值操作保持原地。
作用域与提升:const
同样具有块级作用域,且不支持变量提升,意味着必须先声明后使用,并且声明后其引用不可更改。
不变性:
const name = "abc"; name = "def";
将抛出错误 "Assignment to constant variable."。const
声明的是一个对象或数组,虽然不能改变引用,但可以修改其属性或元素,因为这不被视为改变引用本身。const user = { name: "张三", age: 18 };
user.sex = "男"; // 允许,因为这是修改对象属性,不是改变user的引用
console.log(user); // 输出带有新属性的对象
综上所述,let
和 var
的主要区别在于作用域和变量提升行为,而 const
则用于定义不可变的引用,确保数据的安全性和程序的可预测性。