js var变量具体含义和用法

本文通过实例详细介绍了JavaScript中变量的作用域,特别是局部变量与全局变量的区别,以及var关键字在不同上下文中如何影响变量的可见性和作用域。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

经验研究发现 JavaScript 的 var 关键字貌似是用来声明局部变量的。

下例子声明了2个局部变量
<script language="javascript">
<!--
    var str = "Hello";
    function change() {
        var str = "say";
    }
    change();
    document.write(str);
-->
</script>
change()函数里 str 变量的值改变不会影响函数外的 str 变量。例子输出:Hello

下面声明了一个全局变量和一个局部变量
<script language="javascript">
<!--
    str = "Hello";
    function change() {
        var str = "say";
    }
    change();
    document.write(str);
-->
</script>
函数里 str 的改变不会影响到函数外的 str 变量,应为它是局部的。例子输出:Hello

下面2个例子
<script language="javascript">
<!--
    var str = "Hello";
    function change() {
        str = "say";
    }
    change();
    document.write(str);
-->
</script>

<script language="javascript">
<!--
    str = "Hello";
    function change() {
        str = "say";
    }
    change();
    document.write(str);
-->
</script>
虽然第一个例子函数外的 str 变量声明为局部的但是在函数里仍然能改变它的值。全局变量的作用域是什么?在一个 .js 文件里?一个 HTML 文件里?还是别的?两个例子都输出:say

var 不一定是用来定义局部变量的
jscript的全局变量和局部变量的分界是这样的
过程体(包括方法function,对象Object o ={})外的所有变量不管你有没有加var保留字,他都是全局变量
而在过程体内(包括方法function(){},对象Object o={})内的对象加var保留字则为局部变量,而不加var保留字即为全局变量
js的全局作用域应该是在看着办的的范围内,不一定是同一个页面,比如说在一个iframe里就不可以调用嵌入他的页面的JS
个人总结:var在过程体function和object v={}内部的var只属于该过程体,也就是只要var在过程体内就只听过程体一个人的命令,过程体外面的干我甚事,他影响不了我,我也影响不了他
 
举个例子来说明:过程体外边就好像一个国家,
              过程体内部就好像一个家庭,
              1).如果过程体内部有var
              国家开奥运会是他自己的事,他开他的奥运会,我在家里睡我的觉,互相不影响;
 
              2).如果过程体内部没有var
              国家开奥运会要你家里面出个人作为志愿者,这时候你就受到国家的影响,同时你也影响了            国家
### JavaScript 中 `const` `var` 的用法及区别 在 JavaScript 中,`const` `var` 是两种用于声明变量的关键字,但它们的用法行为存在显著差异。以下是它们的主要特点区别: #### 1. 声明与初始化 - **`const`** 必须在声明时进行初始化,并且一旦赋值后其绑定的值不可更改(对于基本数据类型如数字、字符串等,这意味着值是固定的;而对于对象或数组,虽然引用地址不可变,但其内部属性可以被修改)[^4]。 - **`var`** 可以在声明时不初始化,并且可以在后续代码中多次重新赋值[^2]。 #### 2. 提升(Hoisting) - **`var`** 具有变量提升特性,即变量在声明之前可以被访问,但在声明之前访问时值为 `undefined`[^1]。 - **`const`** 没有变量提升,必须先声明再使用,否则会抛出 `ReferenceError` 错误[^3]。 #### 3. 作用域 - **`var`** 定义的变量具有函数作用域(Function Scope),即变量只在定义它的函数内部有效。如果在函数外部定义,则变量为全局变量。 - **`const`** 定义的变量具有块级作用域(Block Scope),即变量仅在 `{}` 所界定的代码块内有效[^3]。 #### 4. 重新赋值 - **`const`** 声明的变量不能被重新赋值,这确保了变量的值在其生命周期内保持不变(注意:对于对象或数组,虽然不能重新赋值,但其内部属性或元素可以被修改)[^4]。 - **`var`** 声明的变量可以被重新赋值,没有任何限制。 #### 示例代码 以下是一些示例代码,展示 `const` `var` 的行为差异: ```javascript // var 示例 console.log(x); // 输出: undefined (变量提升) var x = 10; console.log(x); // 输出: 10 if (true) { var y = 20; } console.log(y); // 输出: 20 (var 没有块级作用域) // const 示例 // console.log(z); // 抛出 ReferenceError: z is not defined const z = 30; console.log(z); // 输出: 30 if (true) { const w = 40; } // console.log(w); // 抛出 ReferenceError: w is not defined (const 具有块级作用域) ``` #### 推荐使用场景 - **`const`** 应优先使用,特别是在声明那些不需要重新赋值的常量或配置项时。 - **`var`** 不推荐在现代 JavaScript 开发中使用,因为它容易引发作用域变量提升相关的问题[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值