我试图用一个函数生成一个变量并在另一个函数中使用它,然后再将它传递给第二个函数的另一个函数。我已经尝试以多种方式将变量放在括号内,但我似乎无法让变量在最终函数中发出警报。 JSfiddle
function randomNumber(randomstring) {
var chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz";
var string_length = 16;
var randomstring = '';
for (var i=0; i<string_length; i++) {
var rnum = Math.floor(Math.random() * chars.length);
randomstring += chars.substring(rnum,rnum+1);
}
//document.randform.randomfield.value = randomstring;
// alert(randomstring);
}
$("#btn").click( function() {
randomNumber();
//alert(randomstring);
update();
});
function update() {
alert(randomstring);
}
我已经浏览了几个关于Scope的文档,但我看不到我在这里做的不是很好。
答案 0 :(得分:3)
在函数内声明的变量var
语句仅在该函数中可见。
所以,你可以返回randomString
并传递它,就像这样
function randomNumber(randomstring) {
...
...
return randomstring;
}
$("#btn").click( function() {
update(randomNumber());
});
function update(randomstring) {
alert(randomstring);
}
答案 1 :(得分:1)
您必须在包含使用它的所有函数的作用域中声明它。
var randomstring; // e.g. here
function randomNumber(randomstring) {
randomstring = ''; // No var here. Use the existing one, not a new one in local scope
答案 2 :(得分:1)
在var randomstring = '';
名称空间中定义global
,而不是randomNumber
函数
JS
var randomstring = '';
function randomNumber() {
var chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz";
var string_length = 16;
randomstring = '';
for (var i=0; i<string_length; i++) {
var rnum = Math.floor(Math.random() * chars.length);
randomstring += chars.substring(rnum,rnum+1);
}
}
$("#btn").click( function() {
randomNumber();
update();
});
function update() {
alert(randomstring);
}
<强> Demo Link 强>
答案 3 :(得分:1)
randomstring
变量具有randomNumber范围。因此,您可以选择如何允许更新功能使用它。
重写更新函数 - 使用randomString作为参数调用更新函数,如下所示:
function update(randomstring) {
alert(randomstring);
}
创建对象 - 将randomstring作为所述对象属性的对象中的两个函数进行包装。这是一个例子:
JSFiddle:http://jsfiddle.net/GFK6B/3/
var obj = {
randomNumber: function() {
var chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz";
var string_length = 16;
var randomstring = '';
for (var i=0; i<string_length; i++) {
var rnum = Math.floor(Math.random() * chars.length);
randomstring += chars.substring(rnum,rnum+1);
}
this.randomstring = randomstring
},
update: function() {
alert(this.randomstring)
}
}
$("#btn").click(function() {
obj.randomNumber()
obj.update()
})
答案 4 :(得分:0)
你没有从第一个函数返回anthing是通过将randomString作为全局变量http://jsfiddle.net/venkatjp/GFK6B/2/来实现它的一种方法。
第一个函数中为return randomstring;
,点击事件中为randomstring = randomNumber(randomstring);
。