浅谈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 Cookie 直接浏览网站分网址
Dec 08 Javascript
js获取当前地址 JS获取当前URL的示例代码
Feb 26 Javascript
JavaScript获取并更改input标签name属性的方法
Jul 02 Javascript
bootstrap模态框垂直居中效果
Dec 03 Javascript
js实现五星评价功能
Mar 08 Javascript
深入理解vue Render函数
Jul 19 Javascript
分析javascript中9 个常见错误阻碍你进步
Sep 18 Javascript
ES6中数组array新增方法实例总结
Nov 07 Javascript
JS 中document.write()的用法和清空的原因浅析
Dec 04 Javascript
浅谈Javascript常用正则表达式应用
Mar 08 Javascript
echarts 使用formatter 修改鼠标悬浮事件信息操作
Jul 20 Javascript
Vue 根据条件判断van-tab的显示方式
Aug 03 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
使用PHPMYADMIN操作mysql数据库添加新用户和数据库的方法
2010/04/02 PHP
完美解决令人抓狂的zend studio 7代码提示(content Assist)速度慢的问题
2013/06/20 PHP
PHP微信红包生成代码分享
2016/10/06 PHP
ajax+php实现无刷新验证手机号的实例
2017/12/22 PHP
2007/12/23更新创意无限,简单实用(javascript log)
2007/12/24 Javascript
JAVASCRIPT实现的WEB页面跳转以及页面间传值方法
2010/05/13 Javascript
js弹窗代码 可以指定弹出间隔
2010/07/03 Javascript
利用google提供的API(JavaScript接口)获取网站访问者IP地理位置的代码详解
2010/07/24 Javascript
简单实用的全选反选按钮例子
2013/10/18 Javascript
JavaScript头像上传插件源码分享
2016/03/29 Javascript
深入理解事件冒泡(Bubble)和事件捕捉(capture)
2016/05/28 Javascript
深入浅析JavaScript函数前面的加号和叹号
2016/07/09 Javascript
利用Angularjs和原生JS分别实现动态效果的输入框
2016/09/01 Javascript
JS DOMReady事件的六种实现方法总结
2016/11/23 Javascript
AngularJS过滤器filter用法总结
2016/12/13 Javascript
Bootstrap超大屏幕的实现代码
2017/03/22 Javascript
Vue 实用分页paging实例代码
2017/04/12 Javascript
Vue2.0 http请求以及loading展示实例
2018/03/06 Javascript
egg.js的基本使用和调用数据库的方法示例
2019/05/18 Javascript
[36:05]DOTA2亚洲邀请赛 3.31 小组赛 A组 Liquid vs Optic
2018/04/01 DOTA
[00:58]PWL开团时刻DAY5——十人开雾0换5
2020/11/04 DOTA
Python面向对象类的继承实例详解
2018/06/27 Python
10行Python代码计算汽车数量的实现方法
2019/10/23 Python
Python实现投影法分割图像示例(二)
2020/01/17 Python
通过实例解析Python文件操作实现步骤
2020/09/21 Python
Python Unittest原理及基本使用方法
2020/11/06 Python
HTML5+CSS3 实现灵动的动画 TAB 切换效果(DEMO)
2017/09/15 HTML / CSS
彩色的非洲教学反思
2014/02/18 职场文书
入党积极分子评语
2014/05/04 职场文书
施工安全生产承诺书
2014/05/23 职场文书
技校毕业生自荐书
2014/05/23 职场文书
期中考试后的感想
2015/08/07 职场文书
安全教育的主题班会
2015/08/13 职场文书
初中体育教学随笔
2015/08/15 职场文书
2016秋季小学开学寄语
2015/12/03 职场文书
一级电子管军用接收机测评
2022/04/05 无线电