js 作用域和变量详解


Posted in Javascript onFebruary 16, 2017

一、说起变量的提升呢,首先我们先看一段简单的代码

<!doctype html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>Document</title>
</head>
<body>
 <script>
  var v = 'hello world';
  alert(v);
 </script>
</body>
</html>

以上代码执行的结果是hello world

然后在看一段代码:

<!doctype html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>Document</title>
</head>
<body>
 <script>
  var v='Hello World';
  (function(){
   alert(v);
  })();
 </script>
</body>
</html>

执行的结果和第一段代码一样hello world

好了,接下来在看这段代码:

<!doctype html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>Document</title>
</head>
<body>
 <script>
  var v='Hello World';
  (function(){
   alert(v);
   var v='I love you';
   alert(v);
  })();
 </script>
</body>
</html>

以上代码执行的结果: 第一个弹出的是undefined;第二个结果是I love you。为什么会有这样的结果呢?

这就跟刚开始提到的变量提升有关系哦~~~下面我们来做下总结:

最后一段代码展现了2个知识点:

1、变量提升

2、作用域链

首先来说作用域链,js访问一个变量时会优先在该作用域内(访问时的那个作用域)寻找是否声明过这个变量,如果该变量已经存在,则直接使用它的值,否则会寻找该作用域的‘父作用域/上级作用域',依次类推,直到找到全局作用域为止。

关于变量提升是指:js在解析的时候总是会将var,function这类关键词的声明语句提升至作用域的最顶部(注意:这里只会提升声明的部分,赋值不会被提升)

所以,由此看来,上述的那段代码就等于:

<!doctype html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>Document</title>
</head>
<body>
 <script>
  var v='Hello World';
  (function () {
   var v; //先将该作用域下的变量提升,但没有赋值
   alert(v); //所以此时是undefined
   var v='I love you';
   alert(v); //I love you
  })();
 </script>
</body>
</html>

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

Javascript 相关文章推荐
js禁止页面刷新禁止用F5键刷新禁止右键的示例代码
Sep 23 Javascript
为Javascript中的String对象添加去除左右空格的方法(示例代码)
Nov 30 Javascript
Extjs中RowExpander控件的默认展开问题示例探讨
Jan 24 Javascript
jquery 扑捉回车键事件代码
Apr 24 Javascript
深入理解JavaScript系列(39):设计模式之适配器模式详解
Mar 04 Javascript
实现音乐播放器的代码(html5+css3+jquery)
Aug 04 Javascript
如何使用PHP+jQuery+MySQL实现异步加载ECharts地图数据(附源码下载)
Feb 23 Javascript
JS针对浏览器窗口关闭事件的监听方法集锦
Jun 24 Javascript
微信小程序开发教程-手势解锁实例
Jan 06 Javascript
解决Linux无法正常安装与卸载Node.js的方法
Jan 19 Javascript
基于vue实现滚动条滚动到指定位置对应位置数字进行tween特效
Apr 18 Javascript
jQuery+ajax实现批量删除功能完整示例
Jun 06 jQuery
利用Chrome DevTools直接调试Node.js和JavaScript的方法详解(并行)
Feb 16 #Javascript
js面向对象编程总结
Feb 16 #Javascript
gulp加批处理(.bat)实现ng多应用一键自动化构建
Feb 16 #Javascript
JS实现DIV高度自适应窗口示例
Feb 16 #Javascript
Js apply方法详解
Feb 16 #Javascript
JavaScript实现的XML与JSON互转功能详解
Feb 16 #Javascript
js实现文字无缝向上滚动
Feb 16 #Javascript
You might like
PHP.MVC的模板标签系统(二)
2006/09/05 PHP
解决php-fpm.service not found问题的办法
2017/06/06 PHP
JS限制上传图片大小不使用控件在本地实现
2012/12/19 Javascript
JavaScript获取Url里的参数
2014/12/18 Javascript
javascript中hasOwnProperty() 方法使用指南
2015/03/09 Javascript
jQuery实现拖拽效果插件的方法
2015/03/23 Javascript
Bootstrap媒体对象学习使用
2017/03/07 Javascript
jquery插件ContextMenu设置右键菜单
2017/03/13 Javascript
微信小程序 侧滑删除(左滑删除)
2017/05/23 Javascript
修改UA在PC中访问只能在微信中打开的链接方法
2017/11/27 Javascript
vue项目中使用tinymce编辑器的步骤详解
2018/09/11 Javascript
jQuery实现条件搜索查询、实时取值及升降序排序的方法分析
2019/05/04 jQuery
详解JavaScript中的坐标和距离
2019/05/27 Javascript
JS 事件机制完整示例分析
2020/01/15 Javascript
微信小程序 获取手机号 JavaScript解密示例代码详解
2020/05/14 Javascript
vue-路由精讲 二级路由和三级路由的作用
2020/08/06 Javascript
在Python中操作列表之List.pop()方法的使用
2015/05/21 Python
Python3中使用urllib的方法详解(header,代理,超时,认证,异常处理)
2016/09/21 Python
Python常用库推荐
2016/12/04 Python
Python tkinter模块弹出窗口及传值回到主窗口操作详解
2017/07/28 Python
python按综合、销量排序抓取100页的淘宝商品列表信息
2018/02/24 Python
Python使用min、max函数查找二维数据矩阵中最小、最大值的方法
2018/05/15 Python
解决Matplotlib图表不能在Pycharm中显示的问题
2018/05/24 Python
用于业余项目的8个优秀Python库
2018/09/21 Python
在Python中获取两数相除的商和余数方法
2018/11/10 Python
tensorflow下的图片标准化函数per_image_standardization用法
2020/06/30 Python
使用Python提取文本中含有特定字符串的方法示例
2020/12/09 Python
CSS3教程(1):什么是CSS3
2009/04/02 HTML / CSS
html5构建触屏网站之网站尺寸探讨
2013/01/07 HTML / CSS
英国汽车和货车租赁网站:Hertz英国
2016/09/02 全球购物
如何进行Linux分区优化
2016/09/13 面试题
模范教师事迹材料
2014/02/10 职场文书
师德模范事迹材料
2014/06/03 职场文书
教师暑期培训感言
2014/08/15 职场文书
党员个人对照检查材料思想汇报
2014/09/16 职场文书
公司给客户的感谢信
2015/01/23 职场文书