【发布时间】:2014-08-15 19:27:58
【问题描述】:
我在使用 jQuery/JavaScript 中的变量范围时遇到了一些问题。我将仅提供一个代码示例来说明我的问题,因为它可能比尝试用文字解释更容易理解。
var example_1 = function() {
row = 10;
}
var example_2 = function() {
something.click(function(){
var something_3 = function() {
alert(row);
}
something_3();
}
}
问题是,无法在 something_3 函数中访问行变量。我在 example_2 函数中访问了 example_1 函数中的其他变量,但是当放入 something_3 函数时它不再起作用。感谢您的帮助!
编辑:添加了额外的代码来显示哪些有效,哪些无效。行在 Build 函数中定义,就像 board 和 mines 一样。板和地雷可以访问,但行不能。
var build = function(row) {
row = typeof row !== 'undefined' ? row : 5;
board = $('.container');
mines = [1,2,3,4];
}
build();
var start = function() {
var tile = $('.container div');
tile.click(function() {
var this_index = $(this).index();
var has_mine = $.inArray(this_index, mines);
var scan = function() {
alert(row);
}
if (has_mine > -1) {
add_alert("Has mine, you're dead!");
} else {
scan();
$(this).html('Clear!');
}
});
var add_alert = function(msg) {
board.append("<span class='alert'>" + msg + "</span>")
$('body').append("<div class='blackout'></div>");
}
}
start();
【问题讨论】:
-
你能添加一个小提琴来展示你的问题吗?你的其他变量也是如此。
-
没有完整的代码,我们只能猜测。我的猜测是,您在 example_1 函数(可能是全局的)之外声明了行,使得 example_3 可以访问它。您的其他变量可能在 example_1 中声明,因此无法访问。
-
没有完整的代码,很难说。这是关于范围的有用简短说明:stackoverflow.com/questions/500431/…
-
您的
row变量被声明为全局变量。应该可以在example_1之外访问,但是使用隐式声明的全局变量是很糟糕的。 -
添加了更多代码,希望对您有所帮助。
标签: javascript jquery variables scope