函数声明会提升, 提升是整个函数体提升至当前作用域的顶层 函数表达式没提升

下列选项中,能正确调用和运行函数的是()

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


__EOF__

本文作者龙陌
本文链接https://www.cnblogs.com/longmo666/p/17836144.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   龙陌  阅读(20)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示