Javascript 函数以及何时使用括号/括号
我是javascript新手,很难理解为什么/何时使用括号/括号 如果你有一个叫clicker的按钮,你可以写Javascript 函数以及何时使用括号/括号,javascript,Javascript,我是javascript新手,很难理解为什么/何时使用括号/括号 如果你有一个叫clicker的按钮,你可以写 document.getElementById("clicker").onclick=function(){ alert("Hi") } 函数具有() 但是 myFunction没有(),或者无法工作(在加载页面时显示警报,而不是单击) myFunction没有() 哦,是的,是这样的: function myFunction(){ //
document.getElementById("clicker").onclick=function(){
alert("Hi")
}
函数具有()
但是
myFunction没有(),或者无法工作(在加载页面时显示警报,而不是单击)
myFunction没有()
哦,是的,是这样的:
function myFunction(){
// ^^ right here
alert("Hi")
}
通过用函数定义替换变量,您可以轻松验证这两个示例是否等效:
function myFunction(){
alert("Hi")
}
document.getElementById("clicker").onclick = myFunction;
// substitute "myFunction"
document.getElementById("clicker").onclick = function myFunction(){
alert("Hi")
};
// remove function name
document.getElementById("clicker").onclick = function(){
alert("Hi")
};
看,我们没有碰任何()
。通过简单地用变量的值替换变量,我们可以将第二个示例转换为第一个示例
您似乎在函数定义中混用了括号:
function foo() { ... }
^^
括号用于调用函数:
foo();
^^
这是两种不同类型的括号,在两个示例中都没有使用第二种括号(这是正确的)
让我们看看如果我们用myFunction()
进行上述替换会发生什么:
注意最后一行中的悬空()
?这看起来不像你的第一个例子。因此,您可以看到调用函数并不等同于定义函数
myFunction()
在常规代码中使用myFunction()时,它始终是执行函数的调用,括号中可能包含函数参数的一组输入
function myFunction()
document.getElementById("clicker").onclick = myFunction;
声明函数时,括号表示定义的参数列表。如果它们为空,则表示没有参数
function myFunction()
document.getElementById("clicker").onclick = myFunction;
设置元素的onclick属性时,它需要对函数的引用。这允许它在实际的onclick事件触发后使用引用执行函数。如果包含括号,它会尝试立即执行函数,然后将onclick设置为函数返回的结果
<button id="clicker" onclick="myFunction()">Click Me!</button>
其中function()是匿名函数的声明
<button id="clicker" onclick="myFunction()">Click Me!</button>
是一个可以帮助您更好地理解函数的参考。在JavaScript中,函数是一级公民,简而言之,这意味着函数可以像正则变量一样工作 考虑:
var x = 5; // x holds a reference to 5
foo(x); // Send whatever is inside x to foo, so it may do something with it.
同样,我们可以这样做:
// Again, x holds a reference to something
var x = function () {
console.log("hello");
}
foo(x); // And again, we send that something into foo
在第二个示例中,x
和function(){…}
是相同的。写一个和写另一个是一样的,就像第一个例子中的x
“真的是”数字5,第二个例子中的x
“真的是”函数
现在,当我们想要一个函数运行时,我们使用引用+括号来调用它。
请考虑这些例子,它们都是相同的:
// foo is the reference to the function, just like x was.
// and we call it with parenthesis:
function foo ()
{
console.log("Hello");
}
foo(); // Logs "hello".
// reference to function (still foo) + parenthesis
var foo = function ()
{
console.log("Hello");
}
foo(); // Logs "Hello"
// Now: A function is called by a reference to a function followed by parenthesis
// So, we can also do this rather nifty thing:
function foo ()
{
console.log("Hello");
}()
// A reference to a function, followed by parenthesis!
因此,正如其他人指出的那样,简短的回答是,在声明函数和调用函数时使用括号,而不是在传递引用时使用括号 “…您的两个示例都没有使用第二个示例”没有,但这意味着OP在第二个示例的某个阶段尝试在
myFunction
之后添加()
。@T.J.Crowder:True,扩展了一点。我投票结束这个问题,因为它在每个/任何编程教程的第一页。@Mathletics是吗?因为我能找到的每一个/任何初学者教程都会谈到使用name()调用函数(即使不传递参数,也总是以括号结尾)。只有经过大量的探索,我才开始理解。@Mathletics:真的吗?使用函数引用并不完全是“在第一页”,谢谢。我以为括号调用的函数与引用它的函数不同,然后我想到了下面的方法,它不会立即调用函数。所以还是有点困惑。。。点击我!函数saySomething(){alert(“Hi”)}使用HTML标记onclick属性解释更新了答案。