浅谈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 点击整页变灰的效果(可做退出效果)。
Jan 09 Javascript
document.write的几点使用心得
May 14 Javascript
javascript实现限制上传文件大小
Feb 06 Javascript
jQuery实现判断滚动条到底部
Jun 23 Javascript
微信小程序教程系列之设置标题栏和导航栏(7)
Jun 29 Javascript
javascript高级模块化require.js的具体使用方法
Oct 31 Javascript
js运算符的一些特殊用法
Jul 29 Javascript
详解在React项目中安装并使用Less(用法总结)
Mar 18 Javascript
Vue中通过Vue.extend动态创建实例的方法
Aug 13 Javascript
浅析vue中的provide / inject 有什么用处
Nov 10 Javascript
JS面向对象编程基础篇(二) 封装操作实例详解
Mar 03 Javascript
Element PageHeader页头的使用方法
Jul 26 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取整函数ceil,floo,round的用法及介绍
2013/08/31 PHP
php上传文件,创建递归目录的实例代码
2013/10/18 PHP
smarty模板引擎之分配数据类型
2015/03/30 PHP
php 解决substr()截取中文字符乱码问题
2016/07/18 PHP
PHP实现的简单适配器模式示例
2017/06/22 PHP
php use和include区别总结
2019/10/13 PHP
jQuery 美元符冲突的解决方法
2010/03/28 Javascript
基于jQuery的history历史记录插件
2010/12/11 Javascript
js substr、substring和slice使用说明小记
2011/09/15 Javascript
动态加载JS文件的三种方法
2013/11/08 Javascript
jQuery对html元素取值与赋值的方法
2013/11/20 Javascript
获得Javascript对象属性个数的示例代码
2013/11/21 Javascript
Nodejs异步回调的优雅处理方法
2014/09/25 NodeJs
javascript中scrollTop详解
2015/04/13 Javascript
纯JavaScript代码实现移动设备绘图解锁
2015/10/16 Javascript
JQuery实现列表中复选框全选反选功能封装(推荐)
2016/11/24 Javascript
Node.js使用Koa搭建 基础项目
2018/01/08 Javascript
vue-cli项目修改文件热重载失效的解决方法
2018/09/19 Javascript
JavaScript基础之静态方法和实例方法分析
2018/12/26 Javascript
微信小程序实现录制、试听、上传音频功能(带波形图)
2020/02/27 Javascript
Python利用itchat对微信中好友数据实现简单分析的方法
2017/11/21 Python
python使用锁访问共享变量实例解析
2018/02/08 Python
anaconda如何查看并管理python环境
2019/07/05 Python
django创建超级用户过程解析
2019/09/18 Python
Tensorflow 卷积的梯度反向传播过程
2020/02/10 Python
10款最佳Python开发工具推荐,每一款都是神器
2020/10/15 Python
北美大型运动类产品商城:Champs Sports
2017/01/12 全球购物
阿联酋最好的手机、电子产品和家用电器网上商店:Eros Digital Home
2020/08/09 全球购物
管理部部长岗位职责
2013/12/05 职场文书
开工庆典邀请函范文
2014/01/16 职场文书
团代会宣传工作方案
2014/05/08 职场文书
八一建军节演讲稿
2014/09/10 职场文书
党的群众路线教育实践活动个人对照检查材料
2014/09/22 职场文书
离婚协议书范文2014(夫妻感情破裂)
2014/12/14 职场文书
2014年医务科工作总结
2014/12/18 职场文书
Python如何使用logging为Flask增加logid
2021/03/30 Python