javascript - 变量作用域 - jQuery/JavaScript

标签 javascript jquery variables scope

我在 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 函数中的其他变量,但是当放入 some_3 函数中时,它不再起作用。感谢您的帮助!

编辑:添加了额外的代码来显示哪些有效,哪些无效。行是在构建函数中定义的,棋盘和地雷也是如此。可以访问棋盘和地雷,但不能访问排。

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();

最佳答案

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]; 
}

关于javascript - 变量作用域 - jQuery/JavaScript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25332919/

相关文章:

javascript - 跨元素文件夹链接css,js文件

javascript - Aurelia 单向绑定(bind)到复选框

javascript - 调试慢速 jQuery 代码

php - Uploadify 中的多重上传并重命名 - 如何发送 scriptData?

java - 为什么 Java 不能为每个循环解析 this 中的变量?

javascript - e.target.result 仅在尝试两三次后才起作用?

javascript - 由于javascript冲突,无法上传图片

javascript - get 使用帐户/个人资料照片 onedrive/microsoft API

variables - 如何正确命名代表值 1 - n 的变量?

java - 有没有办法检查instanceof原语变量java