浅谈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 相关文章推荐
jQuery 源码分析笔记(3) Deferred机制
Jun 19 Javascript
javascript自动改变文字大小和颜色的效果的小例子
Aug 02 Javascript
EasyUI实现二级页面的内容勾选的方法
Mar 01 Javascript
详解Bootstrap glyphicons字体图标
Jan 04 Javascript
javascript html5移动端轻松实现文件上传
Mar 27 Javascript
JavaScript定义及输出螺旋矩阵的方法详解
Dec 01 Javascript
jQuery简单实现向列表动态添加新元素的方法示例
Dec 25 jQuery
LayUI表格批量删除方法
Aug 15 Javascript
vue 监听屏幕高度的实例
Sep 05 Javascript
vue实现购物车小案例
Sep 27 Javascript
vue 封装 Adminlte3组件的实现
Mar 18 Javascript
基于vue实现探探滑动组件功能
May 29 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中在数据库中保存Checkbox数据(1)
2006/10/09 PHP
最令PHP初学者们头痛的十四个问题
2007/01/15 PHP
基于php实现七牛抓取远程图片
2015/12/01 PHP
PHP利用Mysql锁解决高并发的方法
2018/09/04 PHP
浅谈PHP匿名函数和闭包
2019/03/08 PHP
七种PHP开发环境搭建工具
2020/06/28 PHP
JavaScript 原型与继承说明
2010/06/09 Javascript
Javascript中的window.event.keyCode使用介绍
2011/04/26 Javascript
基于JavaScript制作霓虹灯文字 代码 特效
2015/09/01 Javascript
使用PHP+JavaScript将HTML页面转换为图片的实例分享
2016/04/18 Javascript
页面向下滚动ajax获取数据的实现方法(兼容手机)
2016/05/24 Javascript
BootStrap的select2既可以查询又可以输入的实现代码
2017/02/17 Javascript
老生常谈js中0到底是 true 还是 false
2017/03/08 Javascript
jQuery+pjax简单示例汇总
2017/04/21 jQuery
jQuery实现动态添加、删除按钮及input输入框的方法
2017/04/27 jQuery
深入理解vue中slot与slot-scope的具体使用
2018/01/26 Javascript
如何将HTML字符转换为DOM节点并动态添加到文档中详解
2018/08/19 Javascript
解决vue中修改export default中脚本报一大堆错的问题
2018/08/27 Javascript
从Vuex中取出数组赋值给新的数组,新数组push时报错的解决方法
2018/09/18 Javascript
JavaScript实现多层颜色选项卡嵌套
2020/09/21 Javascript
python操作MySQL数据库具体方法
2013/10/28 Python
jupyter notebook引用from pyecharts.charts import Bar运行报错
2020/04/23 Python
Pandas之drop_duplicates:去除重复项方法
2018/04/18 Python
Django框架模板注入操作示例【变量传递到模板】
2018/12/19 Python
Django 静态文件配置过程详解
2019/07/23 Python
python装饰器使用实例详解
2019/12/14 Python
公司离职证明范本(汇总)
2014/09/10 职场文书
群众路线专项整治方案
2014/10/27 职场文书
高中生个性发展自我评价
2015/03/09 职场文书
2015年秋季学校开学标语
2015/07/16 职场文书
三严三实·严以用权心得体会
2016/01/12 职场文书
高中历史教学反思
2016/02/19 职场文书
SQL注入的实现以及防范示例详解
2021/06/02 MySQL
python opencv通过4坐标剪裁图片
2021/06/05 Python
Python+Matplotlib图像上指定坐标的位置添加文本标签与注释
2022/04/11 Python
MySQL视图概念以及相关应用
2022/04/19 MySQL