我是JavaScript的初学者。
有人可以解释一下为什么这不起作用?
以及如何使其发挥作用?
function getResults(keywords) {
foo.foo = function() {
var bar = foo.getSomeText; // Contain "blabla"
};
return bar;
}
// Globale scope
alert(bar); // Do nothing
编辑(抱歉缺少信息):
那是因为我想从xhr请求返回一些文本,我必须使用一个函数来使用onreadystatechange事件。 这是原始代码:
function getResults(keywords) {
// Effectue une requête et récupère les résultats
var xhr = new XMLHttpRequest();
xhr.open('GET', './autoc.php?s='+ encodeURIComponent(keywords));
xhr.onreadystatechange = function() {
if (xhr.readyState == 4 && xhr.status == 200) {
var response = xhr.responseText;
var test = response.split('|');
}
};
xhr.send(null);
return test;
}
var hum = getResults('test');
console.log(hum);
答案 0 :(得分:1)
foo.foo = function() {
var bar = foo.getSomeText; // Contain "blabla"
};
return bar;
忽略foo
似乎没有被声明的事实,bar
在函数内声明,因此它只存在于那里,因为JavaScript具有函数作用域。您无法在该功能范围之外访问它,因此您不能{I}尝试在此处执行此操作。
如果在该函数之外声明它,则只能return
:
return bar
答案 1 :(得分:1)
javascript中变量的范围很简单。它是:
window
)如果未在函数中声明答案 2 :(得分:1)
这应该有效
var bar;
var foo = {getSomeText : 'blabla'};
function getResults(keywords) {
foo.foo = (function() {
return bar = foo.getSomeText; // Contain "blabla"
})();
return bar;
}
// Globale scope
bar = getResults('hi');
alert(bar); // Do nothing
<强> Fiddle 强>
getResults
返回bar,可以在函数if中重新定义
您显式执行该函数,需要将其分配给
全局范围内的变量条。<强>更新强>
AJAX是异步的,您尝试从函数返回值,该函数在回调函数中设置。 因为请求是异步的,所以函数在到达回调函数时已经返回。因此,在第二种情况下,测试将始终未定义
答案 3 :(得分:1)
任何变量的范围只取决于它的声明位置。 如果直接在脚本标记中声明它,而不是在脚本标记块中的方法中,它将是一个全局变量。
目前还不清楚你在代码示例中尝试做什么,因为在“foo.foo”中,第一个“foo”是一个未定义的实体。 你可以试试这个:
<script type="text/javascript">
var foo = {}// creating empty global object named 'foo'
foo.foo = function()//defining method foo() on object foo
{
var bar = "some random text";
//// more coding here
return bar;
}
var myBar = foo.foo();// get text from method. Note that the method call should be post method definition
alert(myBar);
</script>
Javascript简单有趣。我建议阅读一些介绍性文本并查看代码示例以了解它。