浅谈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实现的带缩略图的焦点图片切换(自动播放/响应鼠标动作)
Jan 23 Javascript
jQuery中Ajax的get、post等方法详解
Jan 20 Javascript
js库Modernizr的介绍和使用
May 07 Javascript
Jquery幻灯片特效代码分享--鼠标点击按钮时切换(1)
Aug 15 Javascript
JavaScript阻止回车提交表单的方法
Dec 30 Javascript
Bootstrap每天必学之级联下拉菜单
Mar 27 Javascript
js实现div模拟模态对话框展现URL内容
May 27 Javascript
javascript深拷贝的原理与实现方法分析
Apr 10 Javascript
vue全局使用axios的方法实例详解
Nov 22 Javascript
CKeditor富文本编辑器使用技巧之添加自定义插件的方法
Jun 14 Javascript
Vue3.0中Ref与Reactive的区别示例详析
Jul 07 Vue.js
JavaScript实现九宫格拖拽效果
Jun 28 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 SPL 被遗落的宝石【SPL应用浅析】
2018/04/20 PHP
Laravel框架搜索分页功能示例
2019/02/01 PHP
推荐自用 Javascript 缩图函数 (onDOMLoaded)……
2007/10/23 Javascript
Javascript连接多个数组不用concat来解决
2014/03/24 Javascript
jquery获取html元素的绝对位置和相对位置的方法
2014/06/20 Javascript
JS实现动态给图片添加边框的方法
2015/04/01 Javascript
js获取页面description的方法
2015/05/21 Javascript
简单谈谈原生js的math对象
2017/06/27 Javascript
jQuery实现拼图小游戏(实例讲解)
2017/07/24 jQuery
Node.js调用fs.renameSync报错(Error: EXDEV, cross-device link not permitted)
2017/12/27 Javascript
前端MVVM框架解析之双向绑定
2018/01/24 Javascript
微信小程序用户信息encryptedData详解
2018/08/24 Javascript
vue ssr 实现方式(学习笔记)
2019/01/18 Javascript
[01:20]DOTA2 齐天大圣至宝动态展示
2016/12/13 DOTA
详解Django通用视图中的函数包装
2015/07/21 Python
Anaconda2下实现Python2.7和Python3.5的共存方法
2018/06/11 Python
python中从str中提取元素到list以及将list转换为str的方法
2018/06/26 Python
Python实现EXCEL表格的排序功能示例
2019/06/25 Python
解决python多行注释引发缩进错误的问题
2019/08/23 Python
pandas的相关系数与协方差实例
2019/12/27 Python
python实现堆排序的实例讲解
2020/02/21 Python
Python3.6 中的pyinstaller安装和使用教程
2020/03/16 Python
jupyter notebook tensorflow打印device信息实例
2020/04/20 Python
Python页面加载的等待方式总结
2021/02/28 Python
欧洲最大的美妆零售网站:Feelunique
2017/01/14 全球购物
SCDKey德国:全球领先的数字游戏市场
2019/04/09 全球购物
Java程序员面试题
2016/09/27 面试题
市场总经理岗位职责
2014/04/11 职场文书
班风学风建设方案
2014/05/06 职场文书
道路施工安全责任书
2014/07/24 职场文书
政协工作总结2015
2015/05/20 职场文书
给朋友的赠语
2015/06/23 职场文书
2016年共产党员个人承诺书
2016/03/24 职场文书
React列表栏及购物车组件使用详解
2021/06/28 Javascript
剑指Offer之Java算法习题精讲二叉树的构造和遍历
2022/03/21 Java/Android
JS轻量级函数式编程实现XDM二
2022/06/16 Javascript