浅谈JavaScript中变量和函数声明的提升


Posted in Javascript onAugust 09, 2016

现象:

1. 在JavaScript中变量和函数的声明会提升到最顶部执行。

2. 函数的提升高于变量的提升。

3. 函数内部如果用var声明了相同名称的外部变量,函数将不再向上寻找。

4. 匿名函数不会提升。

5. 不同<script>块中的函数互不影响。

例子:

函数声明提升高于变量声明

//同时声明变量a和函数a
var a;
function a() {} 
alert(typeof a); //显示的是"function",初步证明function的优先级高于var。

//先声明函数后声明变量,证明上边的例子不是function覆盖了变量
function a() {}
var a; 
alert(typeof a); //显示的仍是"function",而不是"undefined",即function的优先级高于var。

//声明了变量的同时赋值
function a() {}
var a = 1;
alert(typeof a); //number,此时不是function了。
//说明:"var a=1"相当于"var a;a=1",即先声明,后赋值,"a=1"相当于把a重新赋值了,自然就是number!

函数内部用var定义了和外部相同的变量,函数将不再向上找外部的变量

var value = 'hello';
function show() {
  alert(value);
  if (!value) {
    var value = 'function';
  }
  alert(value);
}
show() //此处调用函数依次弹出 "undefined", "function"

//上例相当于var value = 'hello';
function show() {
var value; //注意这行
  alert(value);
  if (!value) {
    value = 'function'; //这行去掉var
  }
  alert(value);
}
show()//1.如果上列中show内部定义value未用var,则会用到外部的变量,弹出"hello", "hello"。 
//2.如果函数内部未定义value,也能获取到外部的value值。

匿名函数不会向上提升

getName()
var getName = function () {
  alert('closule')
}
function getName() {
  alert('function')
}
getName()

//上边的代码相当于
function getName() { //函数向上提升
  alert('function')
}
getName()
var getName = function () {
  alert('closule')
}
getName()

//代码执行分别弹出 "function", "closule"

不同<script>块中的函数互不影响

<script>
  getName()
  var getName = function () {
    alert('closule')
  }
<script>
<script>
  function getName() {
    alert('function')
  }
<script>

//代码执行报错:TypeError: getName is not a function
//因为第一个<script>块中getName()函数未定义,匿名函数又不会向上提升

以上这篇浅谈JavaScript中变量和函数声明的提升就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
写出更好的JavaScript之undefined篇(上)
Nov 22 Javascript
JavaScript之appendChild、insertBefore和insertAfter使用说明
Dec 30 Javascript
javascript垃圾收集机制与内存泄漏详细解析
Nov 11 Javascript
比较常见的javascript中定义函数的区别
Nov 09 Javascript
JavaScript实现简易的天数计算器实例【附demo源码下载】
Jan 18 Javascript
详解Javascript中DOM的范围
Feb 13 Javascript
AngularJS ui-router刷新子页面路由的方法
Jul 23 Javascript
vue中filters 传入两个参数 / 使用两个filters的实现方法
Jul 15 Javascript
layui实现左侧菜单点击右侧内容区显示
Jul 26 Javascript
微信小程序—setTimeOut定时器的问题及解决
Jul 26 Javascript
Antd的Table组件嵌套Table以及选择框联动操作
Oct 24 Javascript
vue 使用微信jssdk,调用微信相册上传图片功能
Nov 13 Javascript
浅谈js基本数据类型和typeof
Aug 09 #Javascript
js中判断变量类型函数typeof的用法总结
Aug 09 #Javascript
详解js实现线段交点的三种算法
Aug 09 #Javascript
完美解决jQuery符号$与其他javascript 库、框架冲突的问题
Aug 09 #Javascript
jQuery对checkbox 复选框的全选全不选反选的操作
Aug 09 #Javascript
引用jquery框架后出错的解决方法
Aug 09 #Javascript
js实现常用排序算法
Aug 09 #Javascript
You might like
PHP正确配置mysql(apache环境)
2011/08/28 PHP
判断php数组是否为索引数组的实现方法
2013/06/13 PHP
php操作mysqli(示例代码)
2013/10/28 PHP
ajax+php控制所有后台函数调用
2015/07/15 PHP
WordPress开发中短代码的实现及相关函数使用技巧
2016/01/05 PHP
PHP简单读取PDF页数的实现方法
2016/07/21 PHP
Laravel 微信小程序后端搭建步骤详解
2019/11/26 PHP
xmlhttp缓存清除的2种解决方法
2013/12/13 Javascript
js判断是否为ie的方法小结
2014/01/13 Javascript
微信小程序五星评分效果实现代码
2017/04/06 Javascript
详解vue-cli 本地开发mock数据使用方法
2018/05/29 Javascript
vue实现todolist基本功能以及数据存储功能实例详解
2019/04/11 Javascript
vue实现路由切换改变title功能
2019/05/28 Javascript
解决vue+router路由跳转不起作用的一项原因
2020/07/19 Javascript
[14:50]2018DOTA2亚洲邀请赛开幕式
2018/04/03 DOTA
python回调函数中使用多线程的方法
2017/12/25 Python
python Opencv将图片转为字符画
2021/02/19 Python
python Pandas库基础分析之时间序列的处理详解
2019/07/13 Python
Python将string转换到float的实例方法
2019/07/29 Python
python迭代器常见用法实例分析
2019/11/22 Python
Python库安装速度过慢解决方案
2020/07/14 Python
DHC中国官方购物网站:日本通信销售No.1化妆品
2016/08/20 全球购物
视图的作用
2014/12/19 面试题
上班上网检讨书
2014/01/29 职场文书
刘胡兰的英雄事迹材料
2014/02/11 职场文书
高中学生干部学习的自我评价
2014/02/21 职场文书
七匹狼男装广告词
2014/03/21 职场文书
优秀员工演讲稿
2014/05/19 职场文书
幼儿园六一儿童节活动方案
2014/08/26 职场文书
军训阅兵新闻稿
2015/07/17 职场文书
Java基于字符界面的简易收银台
2021/06/26 Java/Android
Node与Python 双向通信的实现代码
2021/07/16 Javascript
Python Matplotlib库实现画局部图
2021/11/17 Python
Nginx动静分离配置实现与说明
2022/04/07 Servers
Golang 切片(Slice)实现增删改查
2022/04/22 Golang
Redis sentinel哨兵集群的实现步骤
2022/07/15 Redis