使用js对象调用其他函数的函数

时间:2015-10-06 09:34:46

标签: javascript jquery function object

我有两个函数一和二,其中函数一调用第二个函数,但它不起作用,

例如:

function one() {
 var a = 1;
 var position = {
  global: function(b) {
    console.log(b);
  }
 }
}

function two(){
 $(window).on('swipedown', function() {
   one();
   position.global(a);
});
}

two();

demo`

jsfiddle

2 个答案:

答案 0 :(得分:1)

您需要在函数外部声明a和position对象以避免闭包。

var a = null, position = {};

function one() {
  a = 1;
  position = {
  global: function(b) {
    console.log(b);
  }
 }
}

function two(){
 $(window).on('swipedown', function() {
   one();
   position.global(a);
});
}

two();

答案 1 :(得分:0)

这里的问题是变量aposition的范围,因为你已经在函数one中声明了它们,它只存在于函数内部,一旦函数退出变量不再可用。

由于您正在访问函数two中的变量,因此需要在共享范围内声明它们,例如

var position, a;

function one() {
  a = 1;
  position = {
    global: function(b) {
      snippet.log('b:' + b);
    }
  }
}

function two() {
  $(window).on('scroll', function() {
    one();
    position.global(a);
  });
}

two();
body {
  height: 3000px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<!-- Provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>

使用变量a的另一种方法是使用像

这样的闭包

var position;

function one() {
  var a = 1;
  position = {
    global: function() {
      snippet.log('a:' + a);
    }
  }
}

function two() {
  $(window).on('scroll', function() {
    one();
    position.global();
  });
}

two();
body {
  height: 3000px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<!-- Provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>