JS变量及其作用域

 更新时间:2017年03月29日 14:54:30   作者:liujian_laohan  
本文主要介绍了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>

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

相关文章

  • javascript 获取模态窗口的滚动位置代码

    javascript 获取模态窗口的滚动位置代码

    模态窗口的滚动位置获取办法还有不知道的吗?下面的方法或许对大家有所帮助,感兴趣的朋友可以了解下,希望对大家有所帮助
    2013-08-08
  • 使用watch在微信小程序中实现全局状态共享

    使用watch在微信小程序中实现全局状态共享

    这篇文章主要给大家介绍了关于如何使用watch在小程序中实现全局状态共享的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用微信小程序具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-06-06
  • JS事件在IE与FF中的区别详细解析

    JS事件在IE与FF中的区别详细解析

    这篇文章主要是对JS事件在IE与FF中的区别进行了详细的分析介绍,需要的朋友可以过来参考下,希望对大家有所帮助
    2013-11-11
  • JS获得选取checkbox整行数据的方法

    JS获得选取checkbox整行数据的方法

    这篇文章主要介绍了JS获得选取checkbox整行数据的方法,涉及使用js对DOM节点的操作技巧,非常具有实用价值,需要的朋友可以参考下
    2015-01-01
  • Flexible.js可伸缩布局实现方法详解

    Flexible.js可伸缩布局实现方法详解

    这篇文章主要介绍了Flexible.js可伸缩布局实现方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-11-11
  • JS数据类型判断的9种方式总结

    JS数据类型判断的9种方式总结

    谈到JS的类型判断大家应该都不陌生,下面这篇文章主要给大家介绍了关于JS数据类型判断的9种方式,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-12-12
  • 微信小程序MUI导航栏透明渐变功能示例(通过改变rgba的a值实现)

    微信小程序MUI导航栏透明渐变功能示例(通过改变rgba的a值实现)

    这篇文章主要介绍了微信小程序MUI导航栏透明渐变功能,结合实例形式分析了通过改变rgba的a值实现透明度渐变功能的相关操作技巧,需要的朋友可以参考下
    2019-01-01
  • 小程序简单两栏瀑布流效果的实现

    小程序简单两栏瀑布流效果的实现

    这篇文章主要介绍了小程序简单两栏瀑布流效果的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12
  • 使用webpack和rollup打包组件库的方法

    使用webpack和rollup打包组件库的方法

    这篇文章主要介绍了使用webpack和rollup打包组件库的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-02-02
  • 微信小程序自定义toast组件的方法详解【含动画】

    微信小程序自定义toast组件的方法详解【含动画】

    这篇文章主要介绍了微信小程序自定义toast组件的方法,结合实例形式详细分析了微信小程序自定义toast组件的步骤、实现方法及相关操作技巧,需要的朋友可以参考下
    2019-05-05

最新评论