请问为什么没赋值给变量直接调用跟赋值变量调用变量结果不一样?

请问为什么没赋值给变量直接调用跟赋值变量调用变量结果不一样?

function fn1(){
		var i = 0;
		function fn2(){
			console.log(++i)
		}
		return fn2;
	}
	console.log(fn1()); // function fn2(){}
	var num = fn1(); 
	num();   // 1


正在回答

登陆购买课程后可参与讨论,去登陆

2回答

注意了var num = fn1();这里的等号后面,不是函数名,是函数调用,这句话会先执行等号后面的函数调用,返回函数fn2,然后赋值给变量num,变量num指向的是fn2函数的内存地址。调用num,等同于调用fn2函数

ollie008 2017-10-11 18:32:52

num接收了返回的fn2(){},然后num() 代表你把fn2(){}执行了,所以是1

  • 你console.log(fn1()());试试就知道了
    2017-10-11 18:33:44
  • 提问者 会飞的铁蛋 #2
    return fn2 直接调用 fn1(); 是因为 return 返回的是 fn2; fn2 指向的是 它函数本体,这样理解应该没错的。 但为什么经一轮赋值之后 var num = fn1();,调用 num,却指向 fn2它里面代码运算结果值呢? 就好像把 return fn2; 变成了 return fn2(); 属性变方法?
    2017-10-11 23:33:38
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
HTML5&CSS3进阶与常用框架 2018
  • 参与学习       315    人
  • 提交作业       136    份
  • 解答问题       626    个

如果你有H5、CSS3、JS基础,热爱前端并希望在前端应用方面不断进步,那就来吧,本路径为你带来的课程有HTML5进阶、CSS3进阶、JS面向对象、jQ基础、Less等,助你进一步提升前端开发技能

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师