我正在学习JS和JQuery。我想知道为什么这个代码在窗口加载时返回9?
$(document).ready(function(){
function foo(a){
console.log(a *= a);
};
$('#btn').click(foo(3));
});
为什么它的作用与标准处理程序不同?
$('#btn').click(function(){
foo(3);
});
这里实际发生的是有两种不同的情况:
想象一下,或者实际打开浏览器的控制台,将这些片段粘贴到中
好的,如果不是$(elem).click
,而是以下函数:
function bar(){
console.log(parameters);
}
parameters
是一个关键字,用于打印传递给函数的所有参数
此外,想象一下foo
是这样的:
function foo(a){
return a * a;
};
=
运算符是不必要的,因为a
无论如何都会立即丢弃
现在,如果我调用bar
函数,比如:
bar(foo(3));
则CCD_ 7将返回CCD_。
因为foo
在被传递给bar
之前就已经被执行了。
而在中,以下内容:
bar(function(){
foo(3);
});
您会发现bar
将返回function(){foo(3)}
,因为它没有在参数中执行,而是传递函数引用,而foo(3)
传递函数结果。
所以说,如果你想让它在控制台上的按钮上打印9,你可以这样做:
$(document).ready(function(){
function foo(a){
console.log(a *= a);
};
$('#btn').click(function(){
foo(3);
});
});