var 变量=函数,不加括号,到底是什么意思。。
本来能理解成 “变量创建了一个指向函数的指针”。
看了一个递归的例子,我又迷途了,代码:
这个例子是书上的,结果当然是出错,但是我想如果把最后的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语言中,只有函数内部的子函数才能读取局部变量,因此可以把闭包简单理解成"定义在一个函数内部的函数"。所以,在本质上,闭包就是将函数内部和函数外部连接起来的一座桥梁。
本来能理解成 “变量创建了一个指向函数的指针”。
看了一个递归的例子,我又迷途了,代码:
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语言中,只有函数内部的子函数才能读取局部变量,因此可以把闭包简单理解成"定义在一个函数内部的函数"。所以,在本质上,闭包就是将函数内部和函数外部连接起来的一座桥梁。