'''javascript btn.onclick = test;
var test = function() {
// displayMessage('Your inbox is almost full — delete some mails', 'warning');
displayMessage('Brian: Hi there, how are you today?','chat');
displayMessage('Brian: Hi there, how are you today?');
}
function displayMessage(msgText, msgType){
......
}
'''
Because vareiable declarations(and declarations in general) are processed before any code is executed, declaring a variable anywhere in the code is equivalent to declaring it at the top. 这是 MDN 上面的原话。。但是把 btn.onclick = test;挪到 test 变量定义的下面就正确了。这是为什么??? 还有一点: btn.onclick=functionName;这是对的 但是 btn.onclick=anonymousFunctionName{}就是错的。必须要加上括号。。 但是 The parentheses in this context are sometimes called the "function invocation operator" 这也是 MDN 上面的原话。这又是为什么????
1
fds 2016-11-02 14:23:37 +08:00
declaration 是指 声明,不是定义。声明会提升到前面。也就是说你的代码相当于:
var test onclick = test // 此时值为 undefined test = function(){} |
2
fds 2016-11-02 14:32:27 +08:00
btn.onclick=anonymousFunctionName{} 这根本就不符合语法吧?{}是什么?
你要是定义了匿名函数,比如 var anonymousFunctionName = function(){} btn.onclick = anonymousFunctionName 这肯定是可以的。那句英文是说如果你 var anonymousFunctionName = function(){} btn.onclick = anonymousFunctionName() 就不对了,因为你是调用了函数获得了返回值,而不是把函数本身传给了 onclick 。 |
3
otakustay 2016-11-02 16:55:26 +08:00
变量的声明会上提,并不是变量的赋值会上提,这是 2 个过程
所以当你执行 btn.onclick = test 的时候, test 处于“已经声明,未赋值”的状态,即 undefined |
4
MRwaite 2016-11-05 17:59:22 +08:00
关键词:函数声明 && 函数表达式 && 匿名函数
|