浅谈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 相关文章推荐
麻雀虽小五脏俱全 Dojo自定义控件应用
Sep 04 Javascript
js报错 Object doesn't support this property or method的原因分析
Mar 31 Javascript
JS实现转动随机数抽奖特效代码
Apr 16 Javascript
12个超实用的JQuery代码片段
Nov 02 Javascript
js与jQuery实现checkbox复选框全选/全不选的方法
Jan 05 Javascript
JavaScript必知必会(十) call apply bind的用法说明
Jun 08 Javascript
js实现定时进度条完成后切换图片
Jan 04 Javascript
vue-router 路由基础的详解
Oct 17 Javascript
jQuery时间戳和日期相互转换操作示例
Dec 07 jQuery
微信小程序前端自定义分享的实现方法
Jun 13 Javascript
element实现合并单元格通用方法
Nov 13 Javascript
Vue将props值实时传递 并可修改的操作
Aug 09 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脚本的10个技巧(6)
2006/10/09 PHP
PHP处理SQL脚本文件导入到MySQL的代码实例
2014/03/17 PHP
ThinkPHP中自定义错误页面和提示页面实例
2014/11/22 PHP
ThinkPHP3.2.2实现持久登录(记住我)功能的方法
2016/05/16 PHP
PHP实现支持加盐的图片加密解密
2016/09/09 PHP
PHP载入图像imagecreatefrom_gif_jpeg_png系列函数用法分析
2016/11/14 PHP
php微信公众平台交互与接口详解
2016/11/28 PHP
php创建图像具体步骤
2017/03/13 PHP
Laravel 实现添加多语言提示信息
2019/10/25 PHP
jquery html动态生成select标签出问题的解决方法
2013/11/20 Javascript
关于单文件组件.vue的使用
2018/09/20 Javascript
小程序中canvas的drawImage方法参数使用详解
2019/07/04 Javascript
解决使用layui的时候form表单中的select等不能渲染的问题
2019/09/18 Javascript
微信小程序实现抖音播放效果的实例代码
2020/04/11 Javascript
[51:17]VGJ.T vs Mineski 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
[32:07]完美世界DOTA2联赛PWL S3 LBZS vs Rebirth 第一场 12.16
2020/12/17 DOTA
python模块简介之有序字典(OrderedDict)
2016/12/01 Python
python中reload(module)的用法示例详解
2017/09/15 Python
对python中数据集划分函数StratifiedShuffleSplit的使用详解
2018/12/11 Python
Python命名空间的本质和加载顺序
2018/12/17 Python
python3.7实现云之讯、聚合短信平台的短信发送功能
2019/09/26 Python
python实现通过队列完成进程间的多任务功能示例
2019/10/28 Python
美国家用电器和电子产品商店:Abt
2016/09/06 全球购物
法国发饰品牌:Alexandre De Paris
2018/12/04 全球购物
美国用餐电影院:Alamo Drafthouse Cinema
2020/01/23 全球购物
非常详细的C#面试题集
2016/07/13 面试题
新娘父亲婚礼致辞
2014/01/16 职场文书
四查四看剖析材料
2014/02/14 职场文书
社区交通安全实施方案
2014/03/22 职场文书
《菜园里》教学反思
2014/04/17 职场文书
员工薪酬激励方案
2014/06/13 职场文书
建筑结构施工求职信
2014/07/11 职场文书
机关干部四风问题自我剖析及整改措施
2014/10/26 职场文书
起诉状范本
2015/05/20 职场文书
高中生社会实践心得体会
2016/01/14 职场文书
VS2019连接MySQL数据库的过程及常见问题总结
2021/11/27 MySQL