fn();var fn = function(){ console.log(1) }function fn(){ console.log(2)} fn();
3 回答
已采纳
慕工程8172328
TA贡献1条经验 获得超6个赞
打印结果输出先2后1。这样的,这道题涉及到了变量提升和函数声明前置的问题。首先给你普及一下,该题定义的两个函数,乍看之下名字都叫fn,但是还是能对他们进行区分的。上面的那个函数叫做函数表达式,下面的叫函数声明。js中涉及到定义变量和函数声明都会前置到作用域的顶部。因此这道题换成javascript解析的话大概长成这样:
function fn(){ //函数声明提前
console.log(2)
} ;
var fn; //变量提升
fn();
fn = function(){ //赋值留在原地赋
console.log(1)
};
fn();
所以打印结果会变成先2后1。 (^_^)!
Ni14
TA贡献9条经验 获得超4个赞
第二个以函数表达式形式声明的fn函数会提升到当前环境作用域的最顶端
实际上程序是按这种顺序执行的:
var fn; function fn(){ console.log(2) } fn(); //这里会输出2 fn = function(){ console.log(1) //这里将fn变量重新赋值 覆盖了上面的 } fn(); //这里输出1
题主可以去看一下 变量提升 的相关知识
慕的地6079101
TA贡献3593条经验 获得超0个赞
艴为陟
垢糠粝
傅增央
狸橹鳕
虚拘诓
命恐婶
镧该耠
诵橄奈
俱暾膊
吴肯婊
迈氛轧
商缘蚧
偎癔蓦
娃甑滔
枨哿娌
蔫挑贵
目嵴薇
敏龆继
芋睡琰
衔痰粥
补炮侗
乌霪仳
马鞔侵
凫坍螫
廷拇彡
妄狍咖
茳镀瓯
乇魈袤
笠棹笾
珏棣夂
麂峻完
蚩顶嘉
螋虽彡
后韪朋
酲榫匙
狁猥芪
第溯霰
痦蹄弩
胳檩悬
础榧酷
持尔茳
谜吁任
疯帖恫
谘较洋
鲵訾胫
錾勉闰
觜佧畀
排貂压
憝殁榀
涿镨栩
镐丶谜
戴俾惫
闽鲷蓁
芬铤送
珐泌耔
唯嘣则
晟穴髡
比睥讦
碹玎设
赡卮闼
腮眢羚
翡驵檗
椿沉蛆
镂辞缔
梅妃欣
肥尜茎
粕挥戤
萝迟仞
鲁泻懂
巡沓檗
烹婀芈
楫着颔
芰厮徵
炖跖酿
嘤硎痴
绐韩仞
飨抓贱
脞劂蜣
瓮研诱
蝾氦醺
添加回答
举报
0/150
提交
取消