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代码
Nov 20 Javascript
javascript showModalDialog,open取得父窗口的方法
Mar 10 Javascript
编写Js代码要注意的几条规则
Sep 10 Javascript
非常漂亮的JS+CSS图片幻灯切换特效
Nov 20 Javascript
解决JS无法调用Controller问题的方法
Dec 31 Javascript
Node.js本地文件操作之文件拷贝与目录遍历的方法
Feb 16 Javascript
jquery表单插件form使用方法详解
Jan 20 Javascript
Three.js利用性能插件stats实现性能监听的方法
Sep 25 Javascript
JS实现带动画的回到顶部效果
Dec 28 Javascript
详解ES6中的三种异步解决方案
Jun 28 Javascript
使用Object.defineProperty如何巧妙找到修改某个变量的准确代码位置
Nov 02 Javascript
webpack4.x下babel的安装、配置及使用详解
Mar 07 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 伪造本地文件包含漏洞的代码
2011/11/03 PHP
ThinkPHP的模版中调用session数据的方法
2014/07/01 PHP
在Windows系统下使用PHP生成Word文档的教程
2015/07/03 PHP
PHP实现找出有序数组中绝对值最小的数算法分析
2017/08/07 PHP
php微信公众号开发之现金红包
2018/04/16 PHP
Laravel 实现Controller向blade前台模板赋值的四种方式小结
2019/10/22 PHP
PHP safe_mode开启对于PHP系统函数有什么影响
2020/11/10 PHP
js 对象是否存在判断
2009/07/15 Javascript
页面中js执行顺序
2009/11/09 Javascript
Javascript delete 引用类型对象
2013/11/01 Javascript
JS中prototype的用法实例分析
2015/03/19 Javascript
JavaScript实现级联菜单的方法
2015/06/29 Javascript
对于jQuery性能的一些优化建议
2015/08/13 Javascript
js实现的简单radio背景颜色选择器代码
2015/08/18 Javascript
JavaScript的设计模式经典之建造者模式
2016/02/24 Javascript
JS模拟bootstrap下拉菜单效果实例
2016/06/17 Javascript
AngularJS入门教程之ng-checked 指令详解
2016/08/01 Javascript
js实现String.Fomat的实例代码
2016/09/02 Javascript
Javascript动画效果(1)
2016/10/11 Javascript
jQuery选择器实例应用
2017/01/05 Javascript
Ionic项目中Native Camera的使用方法
2017/06/07 Javascript
Angular实现预加载延迟模块的示例
2017/10/12 Javascript
node.js的exports、module.exports与ES6的export、export default深入详解
2017/10/26 Javascript
详解Python中类的定义与使用
2017/04/11 Python
Python HTTP客户端自定义Cookie实现实例
2017/04/28 Python
Python的IDEL增加清屏功能实例
2017/06/19 Python
Python中Threading用法详解
2017/12/27 Python
Python3标准库总结
2019/02/19 Python
pytorch ImageFolder的覆写实例
2020/02/20 Python
Spartoo西班牙官网:法国时尚购物网站
2018/03/27 全球购物
香港莎莎官网Sasa.com:亚洲著名国际化妆品商城
2019/11/10 全球购物
餐饮业创业计划书范文
2014/01/06 职场文书
社区工作者演讲稿
2014/05/23 职场文书
音乐教育专业自荐信
2014/09/18 职场文书
个人总结格式范文
2015/03/09 职场文书
2015年教研员工作总结
2015/05/26 职场文书