函数提升与变量提升

在JavaScript中,变量的定义和函数的定义都会被提升,而且函数的声明优先于变量的声明;在变量中,变量的赋值不会被提升,只是声明被提升了,但是函数的声明有点不一样,如果是函数式声明则函数体也会被一同提升,如果是var式的声明,怎么提升声明,不会提升函数体。

例子1:

var a=3;function b(){if(a){var a=1;}else{var a=0;}console.log(a);}b();//控制台输出:0;此时输出的a是b函数里面的私有变量。

例子2:

 function b(){var a;if(a){a=1;}else{a=0;}console.log(a);}var a;a=3;b();//控制台输出:0;此时输出的a是b函数里面的私有变量。

例子3:

 var a=1;function b(){a=10;return;function a(){};}b();console.log(a);//控制台输出:1;此时输出的a是全局变量。

例子4:

function b(){function a(){};//函数提升,声明局部函数a;a=10;//将函数a强制进行类型转换为number,并赋值为10;此时的a是局部变量;return;      }var a;a=1;  b();//函数b的返回结果为undefined,因为在函数体里面,没有return任何东西;  console.log(a);//控制台输出:1;此时输出的a是全局变量。

例子5:

 a();//控制台报错,因为被提升的只是a的声明,而赋值的函数体却没有没提升,所以报错信息显示a不是一个函数;b();//控制台输出this is b funciton! ;函数b可以被提升;var a=function(){console.log('this is a function!');}function b(){console.log('this is b function!');}

例子6:

 function b(){console.log('this is b function!');}  var a;a();//控制台报错,因为被提升的只是a的声明,而赋值的函数体却没有没提升,所以报错信息显示a不是一个函数;b();//控制台输出this is b funciton! ;函数b可以被提升;a=function(){console.log('this is a function!');}

对于全局作用域范围的变量,var与没有var是有区别的,没有var的写法,其变量不会被提升。eval里面的变量也不会被提升;

例子

 console.log(a);//控制台报错,a未定义;a变量没有被提升;a=1;console.log(b);//控制台输出undefined;b未赋值;b变量得到提升;var b=1;
 function b(){console.log(a);//控制台输出undefined;a声明得到提升;var a=10;  }function d(){console.log(c);//控制台报错,变量c没有定义;c声明没有得到提升;eval("var c=10");}b();d();

函数提升与变量提升常见面试题相关推荐

  1. Javascript中函数提升和变量提升

    词法分析 词法分析方法: js运行前有一个类似编译的过程即词法分析,词法分析主要有三个步骤: 分析参数 再分析变量的声明 分析函数说明 具体步骤如下: 函数在运行的瞬间,生成一个活动对象(Active ...

  2. 数据分析(SQL)常见面试题:开窗函数

    一.什么是开窗函数 开窗函数/分析函数:over()        开窗函数也叫分析函数,有两类:一类是聚合开窗函数,一类是排序开窗函数. 开窗函数的调用格式为: 函数名(列名) OVER(parti ...

  3. js函数提升和变量提升_关于在js中提升的真相

    js函数提升和变量提升 Earlier this week I was preparing to give a tech talk about some foundational JavaScript ...

  4. python 分类变量xgboost_XGBoost 原理 及 常见面试题

    目录 预备知识:CART树 XGBoost思想 XGBoost目标函数 如何学习第 棵树 基于泰勒公式展开推导目标函数 寻找最佳树 结点分裂与停止生长 寻找最佳分裂点 对比GBDT 常见面试题 预备知 ...

  5. java类型转换面试题_JavaSE:数据类型之间的转换(附常见面试题)

    数据类型之间的转换 分为以下几种情况: 1)低级到高级的自动类型转换: 2)高级到低级的强制类型转换(会导致溢出或丢失精度): 3)基本类型向类类型转换: 4)基本类型向字符串的转换: 5)类类型向字 ...

  6. MySQL数据库常见面试题总结

    1.数据库的常用范式: 第一范式(1NF):指表的列不可再分,数据库中表的每一列都是不可分割的基本数据项,同一列中不能有多个值: 第二范式(2NF):在 1NF 的基础上,还包含两部分的内容:一是表必 ...

  7. web前端常见面试题

    Vue面试题 生命周期函数面试题 1.什么是 vue 生命周期 2.vue生命周期的作用是什么 3.第一次页面加载会触发哪几个钩子 4.简述每个周期具体适合哪些场景 5.created和mounted ...

  8. iOS常见面试题总结

    1.objective-c常见面试题: 1.OC 语言的基本特点 OC 语言是 C 语言的一个超集,只是在 C 的基础之上加上了面向对象(oop) 的特性; OC 与 Java 语言相同都是单继承,这 ...

  9. 前端常见面试题及答案

    文章转自http://www.cnblogs.com/syfwhu/p/4434132.html 前言 本文是在GitHub上看到一个大牛总结的前端常见面试题,很多问题问的都很好,很经典.很有代表性. ...

最新文章

  1. 计算机应用基础课程建设规划,计算机应用基础课程建设方案(6页)-原创力文档...
  2. 一步一步实现自己的模拟控件(6)——控件树及控件区域
  3. IIS,apche,nginx,301域名重定向设置
  4. python题库刷题训练软件_Python基础练习100题 ( 11~ 20)
  5. Centos 系统添加/删除用户和用户组
  6. php条件运算符加法器,【加法笔记系列】JS 加法器模拟
  7. 【luogu4185】 [USACO18JAN]MooTube [并查集]
  8. 在Idea中连接数据库并生成实体类(mybatis逆向生成实体类)
  9. 如何用Vegas制作故障特效
  10. Java基础12 implement和extends的区别
  11. 数字孪生|成熟度评价
  12. 【没有刀剑,如何行走江湖】半晌私语(上)
  13. 在线apt-get安装mysql_apt-get安装mysql
  14. 根据体重和身高获取BMI值
  15. visual studio 中鼠标光标的切换(或鼠标光标变成阴影方块)
  16. 程序员的数学——傅里叶变换
  17. 分布式-Java应用
  18. 面试题:进程间通信的方式
  19. meanshift 与 camshift 跟踪算法比较
  20. vue鼠标右键自定义菜单_使用Vue自定义指令实现右键菜单

热门文章

  1. 一个成功者的八年奋斗史
  2. python3之爬虫代理IP的使用+建立代理IP池
  3. 苹果6信号总是无服务器,苹果6信号不好怎么解决的方法介绍【图文】
  4. 整理:sql server 中sql语句执行顺序
  5. 联想计算机哪款好用,华为和联想电脑哪个好用
  6. CSDN上的C币有什么用?
  7. Echarts绘图技术总结
  8. hive中字符串查找函数 instr 和 locate
  9. java计算当前日期后N个工作日的日期
  10. qqbot机器人编程实例(一)