function submit() {
console.log('Submit!');
}
function foo(callback, param) {
console.log(callback);
// ... //
callback(param); // <-- Script fails here
}
<input type="button" onclick="foo(submit)">
为什么这不起作用?
function submit() { [native code] } foo.js:241
Uncaught TypeError: Illegal invocation
答案 0 :(得分:2)
内在事件属性(如onclick
)有奇怪的范围规则,我不会假装完全理解。
submit
是输入所属的表单元素的submit
属性。
或者:
window.submit
我自己去了the latter route一般原则(借此机会停止使用全局变量),并考虑重新命名函数以减少混淆。
<input type="button">
<script>
// Scoping IIFE omitted from this simplified example
var button = document.getElementsByTagName('button')[0];
button.addEventListener("click", function () { foo(submit); });
function submit // etc etc
</script>