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开发包大全整理
Dec 22 Javascript
为javascript添加String.Format方法
Aug 11 Javascript
基于jQuery的js分页代码
Jun 10 Javascript
IE中createElement需要注意的一个问题
Jul 13 Javascript
jquery插件制作 自增长输入框实现代码
Aug 17 jQuery
jquery实现一个简单好用的弹出框
Sep 26 Javascript
javascript+HTML5 Canvas绘制转盘抽奖
May 16 Javascript
jQuery和hwSlider实现内容响应式可触控滑动切换效果附源码下载(二)
Jun 22 Javascript
AngularJS $injector 依赖注入详解
Sep 14 Javascript
jquery插件treegrid树状表格的使用方法详解(.Net平台)
Jan 03 Javascript
Vue中img的src属性绑定与static文件夹实例
May 18 Javascript
vue移动端弹起蒙层滑动禁止底部滑动操作
Jul 22 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
人工智能开始玩《星际争霸2》 你的操作跟得上吗?
2017/08/11 星际争霸
用PHP控制用户的浏览器--ob*函数的使用说明
2007/03/16 PHP
smarty实现多级分类的方法
2014/12/05 PHP
浅谈PHP中静态方法和非静态方法的相互调用
2016/10/04 PHP
PHP中SERIALIZE和JSON的序列化与反序列化操作区别分析
2016/10/11 PHP
php curl上传、下载、https登陆实现代码
2017/07/23 PHP
PHP实现的随机红包算法示例
2017/08/14 PHP
javascript 函数参数限制说明
2010/11/19 Javascript
jQuery Tab插件 用于在Tab中显示iframe,附源码和详细说明
2011/06/27 Javascript
jQuery获取复选框被选中数量及判断选择值的方法详解
2016/05/25 Javascript
js的form表单提交url传参数(包含+等特殊字符)的两种解决方法
2016/05/25 Javascript
Swiper实现轮播图效果
2017/07/03 Javascript
NodeJS使用七牛云存储上传文件的方法
2017/07/24 NodeJs
JavaScript定义及输出螺旋矩阵的方法详解
2017/12/01 Javascript
JS从非数组对象转数组的方法小结
2018/03/26 Javascript
JavaScript简单实现关键字文本搜索高亮显示功能示例
2018/07/25 Javascript
微信小程序制作表格的方法
2019/02/14 Javascript
[01:32]TI奖金增速竟因它再创新高!DOTA2勇士令状不朽珍藏Ⅰ饰品欣赏
2018/05/18 DOTA
python连接mysql并提交mysql事务示例
2014/03/05 Python
Python实现树莓派WiFi断线自动重连的实例代码
2017/03/16 Python
Python cookbook(数据结构与算法)实现优先级队列的方法示例
2018/02/18 Python
Python 利用scrapy爬虫通过短短50行代码下载整站短视频
2018/10/29 Python
Python 中导入csv数据的三种方法
2018/11/01 Python
python/sympy求解矩阵方程的方法
2018/11/08 Python
python 切换root 执行命令的方法
2019/01/19 Python
Python常用特殊方法实例总结
2019/03/22 Python
pandas的qcut()方法详解
2019/07/06 Python
matplotlib绘制多个子图(subplot)的方法
2019/12/03 Python
Flask框架搭建虚拟环境的步骤分析
2019/12/21 Python
django列表筛选功能的实现代码
2020/03/27 Python
日本卡普空电视游戏软件公司官方购物网站:e-CAPCOM
2018/07/17 全球购物
美国婚礼装饰和活动用品批发供应商:Event Decor Direct
2018/10/12 全球购物
Mamaearth官方网站:印度母婴护理产品公司
2019/10/06 全球购物
C++面试题目
2013/06/25 面试题
体育运动口号
2014/06/09 职场文书
小学社团活动总结
2014/06/27 职场文书