[英]Variable Scope - jQuery/JavaScript
我在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函数中定义,木板和地雷也是如此。 可以访问董事会和地雷,但不能访问行。
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();
多个问题:
编辑2:
var build = function(row) {};
好的,所以您的问题是行变量是一个参数,因此不再是全局变量 。 如果删除传递给build方法的行参数/更新变量名,它将起作用。
var build = function(row) {
row = typeof row !== 'undefined' ? row : 5;
//[...]
}
row
未定义为变量,而是参数。 这样,它就不会作为全局变量泄漏。
只需更改参数名称即可:
var build = function(rowValue) {
row = typeof rowValue !== 'undefined' ? rowValue: 5;
//[...]
}
但是,您不应该使用隐式全局变量。 全局变量已经足够糟糕了。
选项一,声明变量:
var row, board, mines;
var build = function(rowValue) {
row = typeof rowValue !== 'undefined' ? rowValue : 5;
board = $('.container');
mines = [1,2,3,4];
}
方法二,使用全局标识符:
var build = function(row) {
window.row = typeof row !== 'undefined' ? row : 5;
window.board = $('.container');
window.mines = [1,2,3,4];
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.