我很困惑为什么foo2有效,但foo1没有。
JS小提琴:https://jsfiddle.net/474v3mfd/4/
HTML
<a onclick="foo1()">
foo1
</a>
<a onclick="foo2()">
foo2
</a>
的Javascript
function foo1(){
console.log("foo1 called..");
}
foo2 = function(){
console.log("foo2 called..");
}
控制台日志
(index):60未捕获的ReferenceError:未定义foo1 在HTMLAnchorElement.onclick((index):60)onclick @(index):60(索引):50 foo2调用..
摘要
问题特定于 JSFiddle 。当我将代码放在HTML文件中时,它可以正常工作。
答案 0 :(得分:0)
这是关于声明函数的范围的问题。 如果你在浏览器中运行这个代码它将工作得很好,因为函数和函数表达式都在全局范围内声明。
但是这里因为函数表达式已被分配给全局变量&f; foo2&#39;而失败了。所以它是可以访问的,但函数foo1在小提琴的范围内不可用。
如果你这样做,通过使用var创建变量foo2,它将被创建到不同的范围(不再是全局),这就是它将抛出与foo1相同的错误的原因。
var foo2 = function(){
console.log("foo2 called..");
}
更新小提琴 - https://jsfiddle.net/474v3mfd/6/
希望它有所帮助。