提示不多说,记住几个要点:

1.变量和函数都会提升,如下

a = 2;

var a ;

console.log(a); //

fn();//

function fn(){
console.log(1);
}

2.函数会被提升但是,函数表达式不会(ReferenceError)

fn(); 

var f = function fn(){
console.log(1);
}
//ReferenceError: fn is not defined
fn(); 

var fn = function f(){
console.log(1);
}
// TypeError: fn is not a function
var fn = function f(){
console.log(1);
} ; fn(); //
f();//TypeError: f is not a function

实际上第三种看得出来无论函数表达式在哪个位置声明,f() 都相当于是一个匿名函数,并把引用赋值给了fn;

3.函数首先会被提升(函数优先)

foo();//1

var foo;

function foo(){
console.log(1);
} foo = function(){
console.log(2);
}

输出1 二不是2,因为foo是普通变量声明,函数会被首先声明且foo 为重复的声明;

foo();//
function foo(){
console.log(1);
} foo = function(){
console.log(2);
};
function foo(){
console.log(1);
} foo = function(){
console.log(2);
}; foo()//

对比一下,function声明的2种写法,可以看出,var foo = function(){..} 会首先声明一个普通变量,也就是LHS,然后通过RHS 把匿名函数的引用赋值个它,实际上 变量foo是获得了这个匿名函数的引用,

而function(){...} 是直接声明函数,这两点是本质上的区别。

4.函数不会经过添加判断所控制

fn();//

var a = true;

if(a){
function fn()(console.log(1));
}else{
function fn(){console.log(2)}
} // 下面这个会打印出1 var a = true; if(a){
function fn(){console.log(1)};
}else{
function fn(){console.log(2)}
};
fn();

再看下下面的截图:

fn刚开始是未定义的,第二次说明fn被声明了,但是不是一个函数,打印出来看到了,并没有赋值~

所以,所以~  最好不要使用条件判断来控制函数的声明。

最新文章

  1. Struts中文件上传的一些规则...
  2. 将list中的数据通过某一个字段来分类存储的实例
  3. IP地址、子网掩码、网络号、主机号、网络地址、主机地址
  4. Python下科学计算包numpy和SciPy的安装
  5. jQuery scroll事件
  6. Android 订阅-发布者模式-详解
  7. NDK(19)简单示例:ndk调用java基本方法、数组;使用stl、访问设备
  8. 快速切换目录软件推荐——autojump
  9. Codeforces 509C Sums of Digits 贪心
  10. 精通javasCRIPT-学习笔记 Features,Functions,Object
  11. dedecms织梦文章微信分享带缩略图与简介
  12. Android四大组件之 --- Service入门
  13. 3.spring环境搭建
  14. luogu P3522 [POI2011]TEM-Temperature
  15. TypeScript 之 基础类型、高级类型
  16. Python基础笔记(三)
  17. 在EntityFramework6中执行SQL语句【转】
  18. 线程间的通信方式2--管道流Pipes
  19. Mysql安装(win10 64位)
  20. Dubbo源代码实现三:注册中心Registry

热门文章

  1. D02-R语言基础学习
  2. postgresql-查看各个数据库大小
  3. 阿里云RDS数据库备份文件恢复到本地数据库
  4. Python网络练习题
  5. 找到IIS 站点对应的站点日志
  6. vue教程2-01 vue生命周期、钩子函数
  7. vmworkstation安装unbuntu server 网络配置:NAT模式
  8. How To Scan QRCode For UWP (3)
  9. 线程中消费者生产者的实例代码(synchronized关键字)
  10. charles撰写工具/compose和Compose New