上面就是
函数声明和函数表达式
函数声明 函数表达式 函数构造器 的区别!
视频里CASE2的立即执行函数里 Function构造器里 拿不到外层立即执行函数的局部变量 但却能拿到全局变量global (这么不常用的也讲!)
Function构造器的立即执行(在后面加括号)
在Function构造器当中创建的变量仍然是局部变量
[重点] new Function出现了!
注意这里左边的add函数
里面的a = +a 是将a转化为数字 而是否转化成功 可以通过后面的isNaN来判断
以f开头 也就是最左边是f的函数声明的方式就是"函数声明"
而以let var 开头 或者(function(){})() 等开头的 就是表达式或者立即执行表达式
函数相关问题
在函数声明前调用函数,仍然可以调用成功,因为函数声明会被前置
在函数表达式调用,会报错,因为函数表达式不会被前置。此处函数表达式被赋值给变量add,变量add被前置但其值为undefined,当这个变量像函数一样去调用时,就会报错
函数声明会提升,函数表达式只会提升变量名,不会提升整个函数。
使用函数构造器创建函数
1、函数声明和函数表达式,最主要的区别:
函数声明会被前置--在方法前调用函数会成功;函数表达式就会失败
(function(){
//do sth
})(); //匿名函数(立即执行)。
-----
Function构造器
函数构造器
函数创建方式
函数声明会被前置,就是在方法前调用函数会成功,变量声明就会失败
三种不同的函数声明
函数声明与表达式
不同的方式对比
11111111111111111111
Function构造对象后,后加()表示立即调用执行
Function构造器很少使用
使用函数构造器,new Function注意是大写的F
a和b是函数体的形参,第3个参数是函数体
不太懂,
涉及到一些兼容性问题
函数声明会被提前,但右边只声明了没有值