</pre><pre name="code" class="javascript">
<pre name="code" class="javascript"><span style="font-family: Arial, Helvetica, sans-serif;">function drag(){</span>
var oTitle=getByClass('a','b')[0]; oTitle.οnmοusedοwn=fnDown;}function fnDown(){...}
今天在看书的时候,pollyu给我发来这一段代码,问我为何在onmousedown的右边,fnDown函数没有括号。
我突然一愣,一时间也想不出合适的理由,我的第一回答是这样的:
onmousedown是一个函数对吧潘卷卷 16:21:00是茶花烟 16:21:29好 现在有 onmd = func();和onmd = func;茶花烟 16:21:52func();是这个函数执行完的结果。茶花烟 16:22:00func是这个函数的名称茶花烟 16:22:29前者是调用onmousedown的时候返回func函数的返回值茶花烟 16:23:07后者是调用onmousedown的时候等同于调用了func()
后来想想还是颇有偏差,所以在这边整理一下:
看以下的实例代码
function hi(){
var a = 1;
return function(){
console.log(a++);
};
};
var iris = hi();
var polly = hi;
iris();
iris();
polly();
polly();
其实polly就是 hi 函数本身,换句话说就是外层的function。polly()和hi()的结果是一样的。
而iris是hi()调用之后返回的那个东西,也就是说它是里层的那个匿名函数function,变量a时它闭包里面的一个
对象。iris()的调用结果是console.log(a++);
可以这样写两个等式
iris = hi() = polly()
iris() = console.log(a++) = hi()() = polly()()
回到Hi()函数,hi()是把hi函数运行之后返回 function(){console.log(a++)},这种返回叫做函数式编程。hi函数包含了一个闭包,也就是说hi函数返回的function(){console.log(a++)}这个函数会一直保持着对a引用。闭包请戳我
iris的值是hi(),也就是function(){console.log(a++)},而iris再次运行的话就会打印出来a的值,每调用一次iris,那么打印的值a就会加上1.
polly的值就是hi函数,就只是一个普通的a = 1 的赋值操作。
所以上面的代码返回 1,2,1,1.
在这边引用一下百度百科中的例子
代码
1
2
3
4
5
6
7
8
9
|
function
a(){
var
i=0;
function
b(){
alert(++i);
}
return
b;
}
var
c=a();
c();
|
特点
作用
今天的笔记大概就是这么多。最后补充一点,这个是在javascript中的情况,在html中onmousedown的标准写法依旧是
onmousedown = “javascript()”;
就到此为止。