为什么这个变量没有被初始化?
问题描述:
在我的网页<head>
,我这样做:为什么这个变量没有被初始化?
<script type="text/javascript" src="js/foo.js"></script>
<script type="text/javascript">
console.log(foo.bar);
</script>
的foo.js
代码:
var foo = function()
{
this.bar = function()
{
console.log('here');
}
}
后来在HTML文档中:
<a href="#" onclick="foo.bar();">Test</a>
但是如果我点击链接上面,它表示函数没有定义,即使foo.js已包含在内。此外,如果我做console.log(foo)
它只显示'功能()'和console.log(foo.bar)
显示未定义。为什么是这个,为什么我不能访问这个函数?
答
我不知道,如果你想这样说,但让你console.log(foo.bar);
工作,你可以这样做:
var foo = {
bar: function() {
console.log('here');
}
};
答
因为您还没有创建对象。这是运行你的代码的正确方式:
var foo = function()
{
this.bar = function()
{
console.log('here');
}
}
var instance = new foo();
instance.bar();
http://jsfiddle.net/zerkms/wDaEn/
或者,你可以用另一种方式定义它:
var foo = {
bar: function() {
console.log('here');
}
};
foo.bar();
答
的foo.js
内容只是初始化foo的一个函数,直到foo()
叫...什么是在implentation没有意义。 所以foo.bar是未定义的。
答
以上的答案是不正确的,记住JavaScript有没有概念类或所述类别的实例。我会做一些关于Javascript范围和关闭的阅读。
当您将对象分配给变量名称栏时,您将它分配给本地范围。然后您尝试从全局上下文访问您的本地函数。这是错误的。
我敢打赌你正试图沿着下面的内容: -
var foo = {
bar: function() {
}
}
等...
答
最少的代码更改使用以下命令:
<script type="text/javascript">
var foo = function()
{
this.bar = function()
{
console.log('here');
};
return this; // magic yes ?
};
foo().bar();
</script>
我不会进入编辑大战,但是网络开发标签太宽泛,没有任何形式的真正用处。这个问题甚至没有针对Web开发,它纯粹是JavaScript。另外,这与jQuery无关。 – JJJ
@Juhana:确实;-) – zerkms
它也不是jQuery! – ErJab