javascript函数的可变范围问题
Variable scope issue with javascript function
我正试图用spin.js创建一个函数。该函数加载微调器,然后如果用它的参数再次调用它,它就会停止微调器。我搞不清变量的作用域。因此,当我调用函数停止时,我在submitSpinner
上得到一个未定义的。
http://jsfiddle.net/atlchris/tQdZB/1/
function submitSpinner(stopSpinner) {
var theSubmitSpinner;
if (stopSpinner === true) {
theSubmitSpinner.stop();
$('#overlay').remove();
}
else {
$('body').append('<div id="overlay"><div id="spinner"></div></div>');
theSubmitSpinner = new Spinner({
lines: 13,
length: 15,
width: 5,
radius: 20,
color: '#ffffff',
speed: 1,
trail: 60,
shadow: false
}).spin(document.getElementById("spinner"));
}
}
submitSpinner();
$(function() {
$('#overlay').on('click', function() {
alert('click');
submitSpinner(true);
});
});
为什么不从函数中返回Spinner
对象,并让调用方在该时间对其调用.stop()?读取效果更好,而且不必用随机变量污染局部范围,也使submitSpinner()
更简单。
function createSubmitSpinner() {
$('body').append('<div id="overlay"><div id="spinner"></div></div>');
return new Spinner({
lines: 13,
length: 15,
width: 5,
radius: 20,
color: '#ffffff',
speed: 1,
trail: 60,
shadow: false
}).spin(document.getElementById("spinner"));
}
$(function() {
var spinner = createSubmitSpinner();
$('#overlay').on('click', function() {
alert('click');
spinner.stop();
});
});
问题出在哪里?正如您已经知道的那样,这是一个范围问题,只需将变量声明移到函数之外,即可使其全局化,并可从所有函数调用中访问。
然而,最好是而不是将其全局化,而是将停止函数(仅从单击处理程序调用)移动到相同的范围:
function createSpinner() {
var overlay = $('<div id="overlay">'),
spinner = $('<div id="spinner">');
$('body').append(overlay.append(spinner));
var submitSpinner = new Spinner({
lines: 13,
length: 15,
width: 5,
radius: 20,
color: '#ffffff',
speed: 1,
trail: 60,
shadow: false
}).spin(spinner);
overlay.on('click', function() {
submitSpinner.stop();
overlay.remove();
});
}
$(function() {
createSpinner();
});
在函数外移动"var SubmitSpinner;":http://jsfiddle.net/nXbaz/
submitSpinner(true);
因为您的作用域中有一个重载,所以必须提供一个。
相关文章:
- setInterval游戏循环的范围问题
- firefox中的Javascript事件范围问题
- jQuery“this”范围问题
- 可以't在quizz页面范围问题上用最终分数更新变量
- JavaScript 函数变量范围问题
- 奇怪的可变范围问题
- AngularJS中的范围问题
- 如何在 JavaScript for D3.js 中解决这样的范围问题
- 我可以设置这个吗'某事'在该服务中动态创建的嵌套对象中的服务?(可能是范围问题)
- Angular.js的多个rest调用范围问题
- Angular-$http范围问题
- setTimeout范围问题
- NodeJS回调范围问题
- javascript函数的可变范围问题
- 可能存在Javascript范围问题
- 函数之间的Javascript变量范围问题
- 单击视图时的应用器范围问题
- 全球不断改变价值.可能通过引用或范围问题传递?帮助!链接中的详细示例
- 挖空 - 单击绑定到对象函数 - 范围问题
- Angular 在 http 请求后不更新页面(范围问题?