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高级学习笔记整理
Aug 14 Javascript
通过正则格式化url查询字符串实现代码
Dec 28 Javascript
基于jQuery倒计时插件实现团购秒杀效果
May 13 Javascript
JavaScript实现相册弹窗功能(zepto.js)
Jun 21 Javascript
运用js教你轻松制作html音乐播放器
Apr 17 Javascript
基于JavaScript实现移动端无限加载分页
Mar 27 Javascript
常见的浏览器Hack技巧整理
Jun 29 Javascript
vue 组件 全局注册和局部注册的实现
Feb 28 Javascript
vue头部导航动态点击处理方法
Nov 02 Javascript
JsonProperty 的使用方法详解
Oct 11 Javascript
JS实现基本的网页计算器功能示例
Jan 16 Javascript
Vue3不支持Filters过滤器的问题
Sep 24 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来改写404错误页让你的页面更友好
2013/01/24 PHP
php cookie使用方法学习笔记分享
2013/11/07 PHP
javascript+php实现根据用户时区显示当地时间的方法
2015/03/11 PHP
java模拟PHP的pack和unpack类
2016/04/13 PHP
php+js实现百度地图多点标注的方法
2016/11/30 PHP
JQuery select控件的相关操作实现代码
2012/09/14 Javascript
js正文内容高亮效果的实现方法
2013/06/30 Javascript
可恶的ie8提示缺少id未定义
2014/03/20 Javascript
JavaScript中的函数的两种定义方式和函数变量赋值
2014/05/12 Javascript
jQuery实现的fixedMenu下拉菜单效果代码
2015/08/24 Javascript
详解JavaScript编程中正则表达式的使用
2015/10/25 Javascript
AngularJS身份验证的方法
2016/02/17 Javascript
AngularJs bootstrap搭载前台框架——准备工作
2016/09/01 Javascript
jQuery视差滚动效果网页实现方法经验总结
2016/09/29 Javascript
Ajax异步获取html数据中包含js方法无效的解决方法
2017/02/20 Javascript
Angular实现点击按钮后在上方显示输入内容的方法
2017/12/27 Javascript
深入浅析Vue中的slots/scoped slots
2018/04/03 Javascript
vue中的模态对话框组件实现过程
2018/05/01 Javascript
gulp构建小程序的方法步骤
2019/05/31 Javascript
JQuery表单元素取值赋值方法总结
2020/05/12 jQuery
[01:00]DOTA2 store: Collection of Artisan's Wonders
2015/08/12 DOTA
python缩进区别分析
2014/02/15 Python
Python将多个excel文件合并为一个文件
2018/01/03 Python
TensorFlow模型保存和提取的方法
2018/03/08 Python
Python Pandas 转换unix时间戳方式
2019/12/07 Python
python支持多继承吗
2020/06/19 Python
关于PyCharm安装后修改路径名称使其可重新打开的问题
2020/10/20 Python
戴森台湾线上商城:Dyson Taiwan
2018/05/21 全球购物
校长岗位职责
2013/11/26 职场文书
校园歌手大赛策划书
2014/01/17 职场文书
大学生毕业求职自荐书范文
2014/02/04 职场文书
幼教求职信
2014/03/12 职场文书
学习型班组申报材料
2014/05/31 职场文书
群众路线剖析材料(四风)
2014/11/05 职场文书
爱的教育观后感
2015/06/17 职场文书
基于Apache Hudi在Google云构建数据湖平台的思路详解
2022/04/07 Servers