为什么我可以写
var foo = function(){}();
Run Code Online (Sandbox Code Playgroud)
但不能
function(){}();
Run Code Online (Sandbox Code Playgroud)
有任何设计原因吗?
我对何时调用react组件中的函数有疑问.有时我的代码会在我没有将括号添加到函数调用时中断,但并非总是如此.我在这里缺少某种规则吗?
不行
// Callback of parent component
<Link onClick={this.props.OnNavigate}>
A link
</Link>
Run Code Online (Sandbox Code Playgroud)
有用吗
// Callback of parent component
<Link onClick={this.props.OnNavigate()}>
A link
</Link>
// Callback for function of component
<li onClick={this.toggleDepartments}>other example</li>
Run Code Online (Sandbox Code Playgroud) 我有一个函数调用showText()它将一些文本从表单文本框复制到其他地方的段落.它被调用如下:
document.getElementById("mybutton").onclick = showText;
Run Code Online (Sandbox Code Playgroud)
如果我将()添加到showText的末尾,它将无法工作,我从阅读中了解到类似的答案,这是调用函数的唯一方法.
稍后在脚本中它需要()工作:
window.addEventListener("keypress", function(e) {
var keycode = e.keyCode;
if (keycode == 13) {
showText();
}
}, false);
Run Code Online (Sandbox Code Playgroud)
我不确定这里发生了什么.
我正在阅读javascript:Douglas Crockford的优点.我很难理解一个特定的例子和作者提供的解释.
例1 :(第38页)
var quo=function (status) {
return {
get_status:function() {
return status;
}
};
};
var myQuo=quo("amazed");
document.writeln(myQuo.get_status());
Run Code Online (Sandbox Code Playgroud)
书中的解释(我不明白这一点.请解释这一部分):
这个quo函数被设计为在没有新前缀的情况下使用,因此名称不是大写的.当我们调用quo时,它返回一个包含get_status方法的新对象.对该对象的引用存储在myQuo中.即使quo已经返回,get_status方法仍然具有对quo的status属性的特权访问权限.get_status无权访问参数的副本.它可以访问参数本身.这是可能的,因为该函数可以访问创建它的上下文.这叫做封闭.
例2(第39页):
//make a function that assigns event handler function to array of nodes
//when you click on a node, an alert box will display the ordinal of the node
var add_the_handlers=function (nodes) {
var helper=function(i) {
return function(e) {
alert(i);
}
};
var i;
for (i=0;i<nodes.length;i++) {
nodes[i].onclick=helper(i);
}
};
Run Code Online (Sandbox Code Playgroud)
我很难理解这段代码是如何工作的,而且函数(e)是做什么的?为什么辅助函数返回函数反过来又不返回任何东西.这让我非常困惑.如果有人能用简单的语言解释,那将会非常有帮助.非常感谢
EDIT:
According to …Run Code Online (Sandbox Code Playgroud) 为了我个人的改进,我在JS中摆弄了闭包和功能,当我发现这种行为让我感到非常困惑.
使用此函数,将其分配给变量,并通过jQuery从两个不同的HTML元素中调用它:
var print = function(){
console.log("Hello" );
};
document.getElementById('element1').onclick = print();
document.getElementById('element1').onclick = print;
Run Code Online (Sandbox Code Playgroud)
为什么地球上的第二个元素,如果点击,是正确打印"你好"的元素?
我一直认为你需要在函数名称后面加上括号来调用它.
事实上,如果我只是自己调用函数(而不是通过jQuery事件),它按预期工作:
var print = function(){
console.log("Hello" );
};
print; //does nothing
print() //prints "Hello"
Run Code Online (Sandbox Code Playgroud)
我在这里缺少什么?是与jQuery相关的东西吗?提前致谢!
如果我有一个较早定义的函数,则在指定将其用于成功回调时是否需要包括括号?
如果我这样做有什么区别?
如
function fish_food(){//do something}
$.ajax({
url: '/',
success: fish_food
});
Run Code Online (Sandbox Code Playgroud)
要么
$.ajax({
url: '/',
success: fish_food()
});
Run Code Online (Sandbox Code Playgroud) 我希望浏览器显示自上次刷新以来的秒数.我不明白为什么Code 1不起作用; 守则2; 如果代码1不起作用,为什么代码3有效?该setInterval呼叫是在码1和码3的方式类似定义的函数是不同的.但我不清楚为什么会有所作为.
非常感谢您的帮助.我刚开始学习JavaScript.
代码1
<html>
<head>
<title>Time Since Refresh</title>
</head>
<body>
<br/>
<br/>
<span id="timeSinceStart"></span>
<script language="JavaScript">
var timeRefreshed = new Date();
function displayTimeSinceStart(){
var now = new Date();
//compute elapsed time
var elapsed = Math.round((now - timeRefreshed)/1000);
document.getElementById("timeSinceStart").innerHTML = "Time Elapsed: " + elapsed + " seconds.";
}
// Update seconds counter
setInterval(displayTimeSinceStart(), 1000);
</script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
代码2
与CODE 1相同,但setInterval()函数写为
setInterval("displayTimeSinceStart();", 1000);
Run Code Online (Sandbox Code Playgroud)
代码3
<html>
<head>
<title>Time Since Refresh</title>
</head>
<body>
<br/>
<br/>
<span …Run Code Online (Sandbox Code Playgroud)