浅谈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 相关文章推荐
简单谈谈node.js 版本控制 nvm和 n
Oct 15 Javascript
精通JavaScript的this关键字
May 28 Javascript
Angular 2父子组件数据传递之@Input和@Output详解 (上)
Jul 05 Javascript
Vue computed计算属性的使用方法
Jul 14 Javascript
Vue.js仿微信聊天窗口展示组件功能
Aug 11 Javascript
浅谈在react中如何实现扫码枪输入
Jul 04 Javascript
详解Vue+Element的动态表单,动态表格(后端发送配置,前端动态生成)
Apr 20 Javascript
微信小程序与webview交互实现支付功能
Jun 07 Javascript
vuex 中插件的编写案例解析
Jun 10 Javascript
详解Jest结合Vue-test-utils使用的初步实践
Jun 27 Javascript
JSONObject与JSONArray使用方法解析
Sep 28 Javascript
vue使用swiper实现左右滑动切换图片
Oct 16 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中for与foreach的区别分析
2011/03/09 PHP
深入PHP购物车模块功能分析(函数讲解,附源码)
2013/06/25 PHP
PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)
2016/12/14 PHP
代码生成器 document.write()
2007/04/15 Javascript
Jquery CheckBox全选方法代码附js checkbox全选反选代码
2010/06/09 Javascript
javascript onmouseout 解决办法
2010/07/17 Javascript
jQuery boxy弹出层插件中文演示及使用讲解
2011/02/24 Javascript
javascript之querySelector和querySelectorAll使用说明
2011/10/09 Javascript
火狐下table中创建form导致两个table之间出现空白
2013/09/02 Javascript
JavaScript实现函数返回多个值的方法
2015/06/09 Javascript
jQuery取消ajax请求的方法
2015/06/09 Javascript
jQuery 选择同时包含两个class的元素的实现方法
2016/06/01 Javascript
JS轮播图中缓动函数的封装
2020/11/25 Javascript
用vue构建多页面应用的示例代码
2017/09/20 Javascript
深入理解Vue官方文档梳理之全局API
2017/11/22 Javascript
nodejs连接mysql数据库及基本知识点详解
2018/03/20 NodeJs
webuploader实现上传图片到服务器功能
2018/08/16 Javascript
vue中进入详情页记住滚动位置的方法(keep-alive)
2018/09/21 Javascript
package.json各个属性说明详解
2020/03/11 Javascript
谈谈JavaScript中的函数
2020/09/08 Javascript
使用grappelli为django admin后台添加模板
2014/11/18 Python
解决Pyinstaller 打包exe文件 取消dos窗口(黑框框)的问题
2019/06/21 Python
Python Opencv任意形状目标检测并绘制框图
2019/07/23 Python
Python 用matplotlib画以时间日期为x轴的图像
2019/08/06 Python
python求加权平均值的实例(附纯python写法)
2019/08/22 Python
Python3安装pip工具的详细步骤
2019/10/14 Python
python实现超市管理系统(后台管理)
2019/10/25 Python
Python连接字符串过程详解
2020/01/06 Python
查看keras的默认backend实现方式
2020/06/19 Python
大学生活动策划方案
2014/02/10 职场文书
给领导的检讨书
2014/02/16 职场文书
上课迟到检讨书
2014/02/19 职场文书
小学英语课后反思
2014/04/26 职场文书
《秋天的图画》教学反思
2016/02/19 职场文书
先进个人事迹材料(2016推荐版)
2016/03/01 职场文书
营销策划分析:怎么策划才能更好销量产品?
2019/09/04 职场文书