一个Javascript问题

var 变量=函数,不加括号,到底是什么意思。。

本来能理解成 “变量创建了一个指向函数的指针”。

看了一个递归的例子,我又迷途了,代码:

function test(num){
if(num<=1){
return 1
}else{
return num*test(num-1)
}
}
var a=test;
test=null;
alert(a(5));//出错。


这个例子是书上的,结果当然是出错,但是我想如果把最后的5改成1的话,结果就运行起来了

alert(a(1));//显示1

按照我的理解,变量a只是一个指向函数test的指针,既然函数test已经不见了,那变量a也不可能运行的起来了。。
而这句alert(a(1))却说明了,变量a执行了一次函数,只是没有给函数传递参数而已....

另外的理解:

1.函数也是对象,test实际上是这个对象在栈里的地址值,给a赋值的时候拷贝了一份这个地址值给a,test=null,让test指向null不再指向那个函数,alert(a(1)),执行了函数并且传递了参数,只是函数只执行了第一个if分支所以没报错。
2.由于在Javascript语言中,只有函数内部的子函数才能读取局部变量,因此可以把闭包简单理解成"定义在一个函数内部的函数"。所以,在本质上,闭包就是将函数内部和函数外部连接起来的一座桥梁。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值