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 相关文章推荐
JavaScript学习点滴 call、apply的区别
Oct 22 Javascript
js中的cookie的读写操作示例详解
Apr 17 Javascript
jQuery中:focus选择器用法实例
Dec 30 Javascript
jQuery中:button选择器用法实例
Jan 04 Javascript
js 获取今天以及过去日期
Apr 11 Javascript
简单谈谈React中的路由系统
Jul 25 Javascript
two.js之实现动画效果示例
Nov 06 Javascript
Angular2管道Pipe及自定义管道格式数据用法实例分析
Nov 29 Javascript
jQuery pjax 应用简单示例
Sep 20 jQuery
开发用到的js封装方法(20种)
Oct 12 Javascript
vue项目创建并引入饿了么elementUI组件的步骤
Apr 11 Javascript
Element ui 下拉多选时新增一个选择所有的选项
Aug 21 Javascript
利用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安装攻略:常见问题解答(三)
2006/10/09 PHP
PHP查询网站的PR值
2013/10/30 PHP
11个PHPer必须要了解的编程规范
2014/09/22 PHP
php语言中使用json的技巧及json的实现代码详解
2015/10/27 PHP
JS面向对象编程浅析
2011/08/28 Javascript
javascript中如何处理引号编码&amp;#034;
2013/08/15 Javascript
使用js检测浏览器是否支持html5中的video标签的方法
2014/03/12 Javascript
使用mini-define实现前端代码的模块化管理
2014/12/25 Javascript
js用拖动滑块来控制图片大小的方法
2015/02/27 Javascript
jQuery使用$.ajax进行即时验证实例详解
2015/12/11 Javascript
javascript性能优化之事件委托实例详解
2015/12/12 Javascript
基于jQuery实现select下拉选择可输入附源码下载
2016/02/03 Javascript
Javascript中arguments对象的详解与使用方法
2016/10/04 Javascript
JS短信验证码倒计时功能的实现(没有验证码,只有倒计时)
2016/10/27 Javascript
使用Require.js封装原生js轮播图的实现代码
2017/06/15 Javascript
js浏览器滚动条卷去的高度scrolltop(实例讲解)
2017/07/07 Javascript
js封装成插件的步骤方法
2017/09/11 Javascript
微信小程序返回多级页面的实现方法
2017/10/27 Javascript
对于防止按钮重复点击的尝试详解
2019/04/22 Javascript
vue.js 实现a标签href里添加参数
2019/11/12 Javascript
原生微信小程序开发中 redux 的使用详解
2021/02/18 Javascript
[00:59]DOTA2英雄背景故事——上古巨神
2020/06/28 DOTA
在CentOS6上安装Python2.7的解决方法
2018/01/09 Python
python 统计文件中的字符串数目示例
2019/12/24 Python
Python pip install如何修改默认下载路径
2020/04/29 Python
Python如何读写二进制数组数据
2020/08/01 Python
详解win10下pytorch-gpu安装以及CUDA详细安装过程
2021/01/28 Python
IE兼容css3圆角的实现代码
2011/07/21 HTML / CSS
欧洲最古老的鞋厂:Peter Kaiser
2019/11/05 全球购物
《千年梦圆在今朝》教学反思
2014/02/24 职场文书
战略合作协议书范本
2014/04/18 职场文书
2014年社区党建工作汇报材料
2014/11/02 职场文书
2015年社区精神文明工作总结
2015/05/26 职场文书
销售口号霸气押韵
2015/12/24 职场文书
小学语文的各类谚语(70首)
2019/08/15 职场文书
使用Cargo工具高效创建Rust项目
2022/08/14 Javascript