js中var简单说明

js在函数中使用var时,只在函数内部改变变量的值。

(function(){
	s1=123;
	s2=10;
	s3=11;
	function changeVal(){
		s1=1230//全局范围内修改函数变量的值
		console.log("s1="+s1);//s1=1230
		var s1=12300;
		console.log("s1="+s1);//s1=12300
		s2=100;
		var s3=110;//只在函数范围内修改变量值
		console.log(s3+"=");//110
	}
	changeVal();
	console.log("s1="+s1+";s2="+s2+";s3="+s3);//s1=1230;s2=100;s3=11
})();


### JavaScript中`var`和`const`的区别及使用场景 #### 1. **作用域** - `var`声明的变量具有函数作用域或全局作用域,但在块级作用域(如if语句或for循环内部)中仍然可见[^4]。这意味着即使在一个代码块内声明了一个`var`变量,它也会污染外部的作用域。 - `const`声明的变量则严格遵循块级作用域规则,仅在其所在的代码块内有效[^5]。 #### 2. **变量提升** - `var`声明的变量会被提前到当前作用域顶部(即变量提升),但初始化操作仍留在原地。因此,在声明前访问`var`变量会得到`undefined`而不是抛出错误[^3]。 - `const`同样存在提升现象,但由于必须立即初始化,未赋值的情况下尝试访问会导致引用错误(ReferenceError)。这种行为被称为“暂时性死区”(Temporal Dead Zone, TDZ)[^4]。 #### 3. **可变性** - 使用`var`声明的变量可以随时重新赋值[^1]。 - 而`const`用于定义不可再分配新值的常量。需要注意的是,对于简单数据类型(如字符串、数字等),一旦设定就不能更改;但对于复杂数据类型(如对象或数组),虽然不能指向另一个引用地址,但其内部属性或元素是可以修改的[^2]。 #### 4. **重复声明** - 同一作用域下允许多次用`var`关键字声明相同名称的变量[^4]。 - 对于`const`来说,则不允许在同一范围内再次声明同名变量[^5]。 #### 示例代码展示 下面通过几个例子进一步说明两者差异: ```javascript // var 的特性演示 function testVar() { if (true) { var x = 1; } console.log(x); // 输出 1,表明 var 不具备真正的块级作用域 } testVar(); try { console.log(y); // undefined,证明发生了变量提升 } catch(e){} var y; // const 的特性演示 { const z = 2; } console.log(z); // 报错:z is not defined,体现 block-scope 特征 const pi = Math.PI; pi = 3; // TypeError: Assignment to constant variable. const person = {}; person.name = "Alice"; // 正确,因为只是修改了对象的内容而非替换整个对象实例 ``` #### 推荐使用的场景 基于以上分析可知: - 应尽量避免使用`var`,因其容易引发意外的行为,比如不经意间创建了全局变量或者由于变量提升造成逻辑混乱等问题[^3]。 - 首选`const`来声明那些在整个程序运行期间都不打算改变其绑定值得实体,这样不仅有助于提高代码的安全性和可读性,而且还能让编译器优化性能^。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值