我一直在尝试为变量分配一个函数,并且我不断收到一条消息,说foo不是一个函数。我不确定为什么这么说。当我单独调用该方法时,它可以工作,但是当我将它分配给变量时,它不会起作用。
任何人都可以帮我解决这个问题吗?谢谢!!!
以下是我的代码:
function Test(){
function foo(){
return "foo";
}
this.bar = function () {
var foo = foo();
console.log(foo);
};
}
var test = new Test();
test.bar();
答案 0 :(得分:5)
罪魁祸首就是这一行var foo = foo();
。语句var foo
正在重新声明本地foo变量。当您尝试使用foo()
访问它时,它已成为undefined
变量。
重命名变量或函数,一切正常。
答案 1 :(得分:2)
以下代码将有效。现在我们不是试图将相同的函数变量赋给变量。
问题是因为JavaScript是功能范围的。它是失败的,因为this.bar函数将首先尝试评估foo而foo是此函数中的变量名称,因此解释器将尝试执行foo但foo在此范围内是可变的,它不会考虑上面提到的foo。因此它失败了。
当foo1工作时,因为当解释器命中术语foo1时,它将查找当前范围和所有父范围,并且它将获得它。
<%= @categorization.book.title %>
答案 2 :(得分:0)
错误就在这一行
var foo = foo();
您的变量foo
与该函数同名,将该函数隐藏在外部。
重命名它将解决错误。
var foo1 = foo();
答案 3 :(得分:0)
您从这一行看到的错误是:
var foo = foo();
当您使用var
时,您说正在为当前的范围级别foo
定义this.bar
- 这意味着它不会冒泡到{{} 1}}。您可以将变量重命名为其他内容:
Test
或者只是放弃这个变量:
var result = foo();
console.log(result);
完全是你的选择。
答案 4 :(得分:0)
如果您正在学习如何创建和使用JavaScript对象,您可能需要像这样重写代码:
0
所有JavaScript对象都从它们继承属性和方法 原型。使用对象文字或新对象创建的对象 Object(),继承自Object.prototype的原型。对象 使用new Date()创建的继承Date.prototype。该 Object.prototype位于原型链的顶部。