当前位置: 首页 > 编程笔记 >

JS变量及其作用域

芮宇航
2023-03-14
本文向大家介绍JS变量及其作用域,包括了JS变量及其作用域的使用技巧和注意事项,需要的朋友参考一下

1、 变量及其作用域:变量分为“全局变量”和“局部变量”,“全局变量”申明在函数外部,可供所有函数使用,而“局部变量”申明在函数体内部,只能在定义该变量的函数体内使用。

(备注:在申明变量时没有var关键字,而是直接赋值的变量均为全局变量)

<script type="text/javascript">
  function main() {  
    n = 10;//这里的n为全局变量,可以被外部直接使用
  }
  main();
  alert(n);
</script>

2、 在函数体内,局部变量的优先级高于全局变量。

<script type="text/javascript">
  //网上看到的我认为很有代表性的一个例子,在函数体外部和内部都申明了相同名字的变量,变量的作用域问题,例子如下:
  var n = 1;
  function test() {
    alert(n); //这里的a并不是全局变量,原因是函数体第四行申明了一个相同重名的局部变
         //量a,如果把第四行a的申明注释掉,那么这里的a显示1,为全局变量。所以得
         //出结论:全局变量a被局部变量a覆盖了。
         //说明了JS函数在test()在执行前,函数体内的变量a都指向了局部变量,但本
         //行输出的a在执行过程中还没有被赋值,所以显示undefined。
    n = 2;
    alert(n);
    var n; //本行申明局部变量a
    alert(n);
  }
    test();
    alert(n);
</script>

按照我的理解,上面例子最后输出的答案应该是:1 2 2 1;但是正确的答案是:undefined 2 2 1; 原因就是函数体外部和内部都申明了相同名字的变量时,局部变量覆盖了全局变量。

3、 外部怎么读取函数体内部的局部变量呢?

一般来说,只有函数体内部可以直接得到外部的全局变量,但是外部要得到函数体内部的局部变量是不行的。但是,通过在函数体内部再定义一个函数返回局部变量,再从外部调用函数就能实现了。

<script type="text/javascript">
  function f1() {    
    var n = 10;    
    function f2() {//在f1()内部再定义f2(),通过f2()访问f1()中的局部变量      
      alert(n);    
    }    
    return f2;//返回f1()局部变量n
  }  
  var result = f1(); //在外部调用f1()函数,就能获取局部变量n的值
  result(); // 10,即为n的值
</script>

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持小牛知识库!

 类似资料:
  • 本文向大家介绍js变量、作用域及内存详解,包括了js变量、作用域及内存详解的使用技巧和注意事项,需要的朋友参考一下 基本类型值有:undefined,NUll,Boolean,Number和String,这些类型分别在内存中占有固定的大小空间,他们的值保存在栈空间,我们通过按值来访问的。 (1)值类型:数值、布尔值、null、undefined。 (2)引用类型:对象、数组、函数。 如果赋值的是引

  • 本文向大家介绍JavaScript 学习笔记之变量及其作用域,包括了JavaScript 学习笔记之变量及其作用域的使用技巧和注意事项,需要的朋友参考一下 一、变量 ECMAscript变量是松散型变量,所谓松散型变量,就是变量名称可以保存任何类型的数据,每个变量仅仅是一个用于保存值的占位符。 定义:var firstDemo; 二、变量的作用域 2.1基本概念 使用var 定义变量:定义该变量的

  • 本文向大家介绍JavaScript 变量、作用域及内存,包括了JavaScript 变量、作用域及内存的使用技巧和注意事项,需要的朋友参考一下 JS变量是松散型的(不强制类型)本质,决定了它只是在特定时间用于保存特定值的一个名字而已; 由于不存在定义某个变量必须要保存何种数据类型值的规则,变量的值及其数据类型可以在脚本的生命周期内改变; 一 变量及作用域 1.基本类型和引用类型 // JS变量包含

  • 问题内容: 有人知道在angularJS中使用美元方法和变量的背后原因是为了指示angularJS避免在进行消化时检查那些值吗?那么,如果遇到and时遇到angular ,那么它将避免检查前者,因为它的变量名前带有美元字符? 问题答案: 有时Angular会忽略以美元符号开头的变量: 在下面Schumli的评论中,json过滤器不会输出它们 使用指令时,angular将不会显示 嵌套 变量。例如,

  • 本文向大家介绍关于JS变量和作用域详解,包括了关于JS变量和作用域详解的使用技巧和注意事项,需要的朋友参考一下 ECMAScript 变量: 1.基本类型值(简单数据段) 2.引用类型值(可能由过个值构成的对象) → 保存在内存中的对象 ------ 动态属性: 只能给引用型值动态添加新属性,以便将来使用。 ------ 复制变量值 : 基本类型值的复制 → 在变量对象上创建一个新值 → 复制给新

  • 嗨,我目前正试图暗示一个OptaPlanner解决方案,我有困难与语法的2个规划变量。这些值是某个范围的连续加倍,该范围需要在解求解之前动态设置。 我已经看了以下2个网站,并很难看到他们应该如何实施。 请有人让我知道这应该如何实施。范围的值可以是0到n之间的任何值。 谢了。

  • 变量作用域 变量的作用域值的是变量的生命周期和作用范围(全局与局部作用域的区别)。 作用域介绍 静态作用域 静态作用域有称为词法作用域,即指其在编译的阶段就可以决定变量的引用。静态作用域只更变量定义的位置有关与代码执行的顺序无关。 var x = 0; function foo() { alert(x); } function bar() { var x = 20; foo(); }

  • 任何编程中的范围都是程序的一个区域,其中定义的变量可以存在,并且超出该变量无法访问。 有三个地方,其中变量可以用Pascal编程语言声明 - 在子程序或块中,称为局部变量 在所有子程序之外,称为全局变量 在子程序参数的定义中称为形式参数 让我们解释什么是local和global变量和形式参数。 局部变量 (Local Variables) 在子程序或块内声明的变量称为局部变量。 它们只能由子程序或