嗨,这是我正在玩的代码
//define a function
var test=function() {
var v=0;
var counter=0;
// click on the element id=z2
$('#z2').click(function(){
v = ++counter;
//call function testdata
testdata();
})
function testdata() {
return v;
} // end of testdata
} // end of var test
//calling p outside of the scope of var test.
var p =test.testdata();
现在p应返回v的值,但它在console.log中显示为undefined。
请提出任何建议
答案 0 :(得分:0)
您需要将v定义为int,如此
var v = 0;
此函数也将返回undefined,因为该函数仅返回其未定义的参数
我很难理解你的问题,但这就是我要做的事情:
//define a function
var test = function() {
var v = 0;
var counter=0;
// click on the element id=z2
$('#z2').click(function(){
v = ++counter;
return v;
})
} // end of var test
var p = test();
答案 1 :(得分:0)
您的代码无法正常工作的原因是因为testdata
仅存在于函数test
的范围内(使其成为私有函数) - 在test
内调用它会有效,但就你的其他代码而言,它并不存在。
使这项工作的一种方法是使用test
作为构造函数,将变量保持为私有但将函数设为公共,如下所示:
// define constructor
var Test = function() {
// private
var v = 0;
var counter = 0;
var that = this;
// click on the element id=z2
$('#z2').click(function(){
v = ++counter;
//call function testdata
that.testdata();
});
// public
this.testdata = function() {
return v;
}
}
var p = new Test();
p.testdata(); // works!
答案 2 :(得分:0)
您的代码存在两个主要问题。
如果你运行它,它会抛出一个错误(1):
test.testdata is not a function !
如果您使用控制台查找test.testdata,您将看到未定义(错误(2))。
如果你尝试var p = testdata(),它也会抛出一个错误(3):
testdata is undefined !
您已在函数test中定义了函数testdata 。测试中的任何代码都可以看到 您的函数testdata,但任何代码外部测试都看不到它。 您的var p调用testdata 在之外。这就是为什么错误(3)。
通过在测试中定义testdata,您可能会认为它会自动添加到测试中作为属性。事实并非如此。您可以向函数添加属性,但这必须在此函数之外发生。这就是错误(1)和(2)的原因。
让我们试试:
// declare your functions by name,
// you later can call them by name without need for a variable
function test() {
// one variable is enough here
var c = 0;
$("#z2").click(function() {
++c;
testdata();
});
}
// function testdata declared by name outside function test
function testdata() {return c;}
// now we can attach testdata as a property to test
test.testdata = testdata;
var p = c; // should be 0 but is undefined
var p = testdata(); // no error, but undefined.
var p = test.testdata(); // no error, but undefined. Why?
与错误(3)相同的问题,但现在变量 c 。它被声明为内部测试, 外面的所有代码都看不到它。 (查找关键字范围和关闭以了解详情);
我们再试一次:
// declare var c outside, so it's in the global scope,
//all following code can see it.
var c = 0;
function test() {
$("#z2").click(function() {
++c;
testdata();
});
}
function testdata() {return c;}
test.testdata = testdata;
var p = c; // --> 0
var p = testdata(); // --> 0
var p = test.testdata(); // --> 0
好的,现在让你的点击功能正常工作。