Javascript函数声明问题

时间:2017-01-12 07:32:26

标签: javascript

我很困惑为什么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文件中时,它可以正常工作。

1 个答案:

答案 0 :(得分:0)

这是关于声明函数的范围的问题。 如果你在浏览器中运行这个代码它将工作得很好,因为函数和函数表达式都在全局范围内声明。

但是这里因为函数表达式已被分配给全局变量&f; foo2&#39;而失败了。所以它是可以访问的,但函数foo1在小提琴的范围内不可用。

如果你这样做,通过使用var创建变量foo2,它将被创建到不同的范围(不再是全局),这就是它将抛出与foo1相同的错误的原因。

var foo2 = function(){
  console.log("foo2 called..");
}

更新小提琴 - https://jsfiddle.net/474v3mfd/6/

希望它有所帮助。