浅谈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+CSS 实现的超Sexy下拉菜单
Jan 17 Javascript
动感效果的TAB选项卡jquery 插件
Jul 09 Javascript
javascript中的void运算符语法及使用介绍
Mar 10 Javascript
关于ExtJS4.1:快捷键支持的问题
Apr 24 Javascript
基于bootstrap3和jquery的分页插件
Jul 31 Javascript
一道JS前端闭包面试题解析
Dec 25 Javascript
vue 和vue-touch 实现移动端左右导航效果(仿京东移动站导航)
Apr 22 Javascript
JS简单实现自定义右键菜单实例
May 31 Javascript
Javascript中toFixed计算错误(依赖银行家舍入法的缺陷)解决方法
Aug 22 Javascript
javascript头像上传代码实例
Sep 28 Javascript
vuex 多模块时 模块内部的mutation和action的调用方式
Jul 24 Javascript
node.js通过url读取文件
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中文汉字验证码
2007/04/08 PHP
PHP中file_exists与is_file,is_dir的区别介绍
2012/09/12 PHP
PHP中CURL的CURLOPT_POSTFIELDS参数使用细节
2014/03/17 PHP
ThinkPHP3.1.3版本新特性概述
2014/06/19 PHP
php实现基于PDO的预处理示例
2017/03/28 PHP
PHP面向对象五大原则之开放-封闭原则(OCP)详解
2018/04/04 PHP
读jQuery之二(两种扩展)
2011/06/11 Javascript
jQuery 1.9使用$.support替代$.browser的使用方法
2014/05/27 Javascript
js 左右悬浮对联广告代码示例
2014/12/12 Javascript
javascript实现网页字符定位的方法
2015/07/14 Javascript
Bootstrap打造一个左侧折叠菜单的系统模板(一)
2016/05/17 Javascript
Angular在一个页面中使用两个ng-app的方法
2017/02/20 Javascript
JS中把函数作为另一函数的参数传递方法(总结)
2017/06/28 Javascript
Node.js 的模块知识汇总
2017/08/16 Javascript
在Swiper内如何制作CSS3动画效果示例代码
2017/12/07 Javascript
Angular4编程之表单响应功能示例
2017/12/13 Javascript
在js代码拼接dom对象到页面上的模板总结
2018/10/21 Javascript
微信小程序实现文字跑马灯
2020/05/26 Javascript
vue使用el-upload上传文件及Feign服务间传递文件的方法
2019/03/15 Javascript
微信小程序如何实现radio单选框单击打勾和取消
2020/01/21 Javascript
python 动态获取当前运行的类名和函数名的方法
2014/04/15 Python
Python使用Selenium模块实现模拟浏览器抓取淘宝商品美食信息功能示例
2018/07/18 Python
python线程里哪种模块比较适合
2020/08/02 Python
python调用百度API实现人脸识别
2020/11/17 Python
html5 实现客户端验证上传文件的大小(简单实例)
2016/05/15 HTML / CSS
俄罗斯电动工具和设备购物网站:Vseinstrumenti.ru
2020/11/12 全球购物
任课老师推荐信范文
2013/11/24 职场文书
交通事故检查书范文
2014/01/30 职场文书
《花瓣飘香》教学反思
2014/04/15 职场文书
计算机应用专业自荐信
2014/07/05 职场文书
优秀高中学生评语
2014/12/30 职场文书
给老师的一封感谢信
2015/01/20 职场文书
接收函格式
2015/01/30 职场文书
关于长城的导游词
2015/01/30 职场文书
博士导师推荐信
2015/03/25 职场文书
常用的文件对应的MIME类型汇总
2022/04/26 HTML / CSS