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 对象链式操作测试代码
Apr 25 Javascript
js获取键盘按键响应事件(兼容各浏览器)
May 16 Javascript
用循环或if语句从json中取数据示例
Aug 18 Javascript
使用jquery制作弹出框效果
Apr 03 Javascript
jQuery实现指定内容滚动同时左侧或其它地方不滚动的方法
Aug 08 Javascript
值得分享的bootstrap table实例
Sep 22 Javascript
老生常谈js数据类型
Aug 03 Javascript
Vue结合Video.js播放m3u8视频流的方法示例
May 04 Javascript
基于rollup的组件库打包体积优化小结
Jun 18 Javascript
el-input 标签中密码的显示和隐藏功能的实例代码
Jul 19 Javascript
javascript中layim之查找好友查找群组
Feb 06 Javascript
详解jQuery的核心函数和事件处理
Feb 18 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
ubuntu 编译安装php 5.3.3+memcache的方法
2010/08/05 PHP
PHP解密Unicode及Escape加密字符串
2015/05/17 PHP
Javascript 获取链接(url)参数的方法
2009/02/15 Javascript
js 实现复制到粘贴板的功能代码
2010/05/13 Javascript
在jquery中处理带有命名空间的XML数据
2011/06/13 Javascript
javascript 实现字符串反转的三种方法
2013/11/23 Javascript
jquery prop的使用介绍及与attr的区别
2013/12/19 Javascript
javascript数组遍历for与for in区别详解
2014/12/04 Javascript
jQuery检测鼠标左键和右键点击的方法
2015/03/17 Javascript
jQuery插件cxSelect多级联动下拉菜单实例解析
2016/06/24 Javascript
jQuery Ajax请求后台数据并在前台接收
2016/12/10 Javascript
图文详解Javascript中的上下文和作用域
2017/02/15 Javascript
jQuery插件HighCharts绘制简单2D柱状图效果示例【附demo源码】
2017/03/21 jQuery
JavaScript重复元素处理方法分析【统计个数、计算、去重复等】
2017/12/14 Javascript
vue3.0 CLI - 2.2 - 组件 home.vue 的初步改造
2018/09/14 Javascript
vue项目中使用Svg的方法
2018/10/24 Javascript
微信小程序搭建自己的Https服务器
2019/05/02 Javascript
微信小程序组件传值图示过程详解
2019/07/31 Javascript
vue中的v-if和v-show的区别详解
2019/09/01 Javascript
Python中的面向对象编程详解(下)
2015/04/13 Python
Python中for循环控制语句用法实例
2015/06/02 Python
浅析Python的Django框架中的Memcached
2015/07/23 Python
python多任务及返回值的处理方法
2019/01/22 Python
使用 Python 快速实现 HTTP 和 FTP 服务器的方法
2019/07/22 Python
Django 实现外键去除自动添加的后缀‘_id’
2019/11/15 Python
python实现简单俄罗斯方块
2020/03/13 Python
在pycharm中文件取消用 pytest模式打开的操作
2020/09/01 Python
解决pip安装tensorflow中出现的no module named tensorflow.python 问题方法
2021/02/20 Python
Farfetch美国:奢侈品牌时尚购物平台
2019/05/02 全球购物
总经理助理岗位职责
2013/11/08 职场文书
教师求职信范文分享
2013/12/27 职场文书
员工工作表现评语
2014/04/26 职场文书
医院护士党的群众路线教育实践活动对照检查材料思想汇报
2014/10/04 职场文书
医院党的群众路线教育实践活动学习心得体会
2014/10/30 职场文书
保密法制宣传月活动总结
2015/05/07 职场文书
python 模块重载的五种方法
2021/04/24 Python