下列选项中,能正确调用和运行函数的是()
A
(function(){
console.log(1);
})
B
fun();
function fun(){console.log(1)}
C
fn();
var fn = function(){console.log(1);};
D
var fn = new Function(a,console.log(a));
fn(1);
正确答案:B
A选项不会自动调用函数,若要调用函数,应改为(function(){console.log(1);})();
B选项,普通函数由于存在函数提升,所以可以调用和执行函数;
C选项,fn是匿名函数,必须先声明后调用;
D选项,使用new Function()创建函数对象时,其参数必须为字符串形式。
函数表达式和函数声明以及它们提升的区别
函数声明会提升, 提升是整个函数体提升至当前作用域的顶层
函数表达式没提升, 提升是提升变量(函数的引用),表达式留在原地
A.立即执行函数没加()调用,相当于只是输入函数名,返回整个函数体
(function(){
console.log(1);
})
B.函数声明整体函数提升至最前面
fun();
function fun(){console.log(1)}
//提升后
function fun(){console.log(1)}
fun(); //正常执行fun(),输出1
C. 函数表达式是先提升变量,后在原来位置赋值
fn();
var fn = function(){console.log(1);};
//实际上
var fn //提升变量
fn() // fn is not a function
fn = function(){console.log(1)} //原来的位置
D. a未定义,记得Function得传字符串来着..
var fn = new Function(a,console.log(a));
fn(1);//ReferenceError: a is not defined