JS变量及其作用域


Posted in Javascript onMarch 29, 2017

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 相关文章推荐
UpdatePanel和Jquery冲突的解决方法
Apr 01 Javascript
node.js正则表达式获取网页中所有链接的代码实例
Jun 03 Javascript
JS实现倒计时和文字滚动的效果实例
Oct 29 Javascript
jQuery+jsp实现省市县三级联动效果(附源码)
Dec 03 Javascript
基于HTML模板和JSON数据的JavaScript交互(移动端)
Apr 06 Javascript
Vue.JS入门教程之事件监听
Dec 01 Javascript
JS给按钮添加跳转功能类似a标签
May 30 Javascript
JavaScript+CSS相册特效实例代码
Sep 07 Javascript
npm 下载指定版本的组件方法
May 17 Javascript
基于Nuxt.js项目的服务端性能优化与错误检测(容错处理)
Oct 23 Javascript
vue 开发企业微信整合案例分析
Dec 02 Javascript
Vue(定时器)解决mounted不能获取到data中的数据问题
Jul 30 Javascript
如何使用Bootstrap 按钮实例详解
Mar 29 #Javascript
Vue 2.0 服务端渲染入门介绍
Mar 29 #Javascript
vue2组件实现懒加载浅析
Mar 29 #Javascript
整理关于Bootstrap排版的慕课笔记
Mar 29 #Javascript
如何使用Bootstrap创建表单
Mar 29 #Javascript
Bootstrap 响应式实用工具实例详解
Mar 29 #Javascript
jQuery日程管理控件glDatePicker用法详解
Mar 29 #jQuery
You might like
PHP+DBM的同学录程序(3)
2006/10/09 PHP
PHP自定义函数收代码
2010/08/01 PHP
php中smarty实现多模版网站的方法
2015/06/11 PHP
PHP生成静态HTML文档实现代码
2016/06/23 PHP
自制PHP框架之模型与数据库
2017/05/07 PHP
javascript判断iphone/android手机横竖屏模式的函数
2011/12/20 Javascript
使用POST方式弹出窗口的两种方法示例介绍
2014/01/29 Javascript
jQuery实现级联菜单效果(仿淘宝首页菜单动画)
2014/04/10 Javascript
Javascript基础知识(三)BOM,DOM总结
2014/09/29 Javascript
基于jQuery实现的图片切换焦点图整理
2014/12/07 Javascript
jQuery源码解读之removeAttr()方法分析
2015/02/20 Javascript
javascript实现标签切换代码示例
2016/05/22 Javascript
两种JavaScript的AES加密方式(可与Java相互加解密)
2016/08/02 Javascript
jQuery Dialog 取消右上角删除按钮事件
2016/09/07 Javascript
JavaScript生成验证码并实现验证功能
2016/09/24 Javascript
利用JS实现点击按钮后图片自动切换的简单方法
2016/10/24 Javascript
手机端js和html5刮刮卡效果
2020/09/29 Javascript
浅谈vue-lazyload实现的详细过程
2017/08/22 Javascript
原生JavaScript实现Ajax异步请求
2017/11/19 Javascript
JS遍历DOM文档树的方法实例详解
2018/04/03 Javascript
vscode 开发Vue项目的方法步骤
2018/11/25 Javascript
vue视频播放插件vue-video-player的具体使用方法
2019/11/08 Javascript
微信小程序自定义导航栏(模板化)
2019/11/15 Javascript
JavaScript检测浏览器是否支持CSS变量代码实例
2020/04/03 Javascript
Python中列表的一些基本操作知识汇总
2015/05/20 Python
解决Python2.7读写文件中的中文乱码问题
2018/04/12 Python
Python 实现在文件中的每一行添加一个逗号
2018/04/29 Python
python实现简易内存监控
2018/06/21 Python
原来我一直安装 Python 库的姿势都不对呀
2019/11/11 Python
管理信息系学生的自我评价
2014/01/11 职场文书
党员群众路线学习心得体会
2014/11/04 职场文书
妈妈别哭观后感
2015/06/08 职场文书
Jupyter Notebook内使用argparse报错的解决方案
2021/06/03 Python
关于k8s环境部署mysql主从的问题
2022/03/13 MySQL
口袋妖怪冰系十大最强精灵,几何雪花排第七,第六类似北极熊
2022/03/18 日漫
Spring Boot优化后启动速度快到飞起技巧示例
2022/07/23 Java/Android